gpt4 book ai didi

c - 共享对象中的函数名称冲突

转载 作者:太空狗 更新时间:2023-10-29 15:25:05 27 4
gpt4 key购买 nike

我正在将 ODBC 驱动程序从 Windows 移植到 Linux
驱动程序是用 C 编写的。
ODBCLinux 上的工作方式是,应用程序调用 ODBC 管理器 (ODBCM),后者依次加载适当的驱动程序和传递函数调用。

假设我的驱动程序被编译成一个共享对象,公开了两个函数 AB
应该发生的是 ODBCM 调用函数 A,而函数 A 调用函数 B。< br/>实际发生的是,当函数 A 调用函数 B 而不是函数 B'(与 B,位于 libodbc 共享对象中,由 Linux 使用 ODBC 应用程序加载)被调用。

我觉得应该有一个编译时标志,或者一个编译后库修改工具来纠正这个问题。
目前,我正在通过库一次执行以下操作:

_B(){ // rename old functions
...
}
B() { // add new wrapper function
return _B(); // which just calls old
}

_A() {
...
_B(); // Change calls to renamed functions
...
}

变化缓慢且感觉笨拙。

最佳答案

尝试使用 -Bsymbolic 链接器选项链接您的 .so(在 gcc 命令行上传递 -Wl,-Bsymbolic)。这会在链接时绑定(bind)所有库内部符号,因此它们以后不会进行任何动态链接。

关于c - 共享对象中的函数名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com