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

The*_*ral 4 c odbc shared-libraries

我移植了ODBC从司机WindowsLinux.
驱动程序是写的C.工作
方式是应用程序调用ODBC管理器(),然后加载相应的驱动程序并传递函数调用. ODBCLinuxODBCM

假设我的驱动程序被编译成一个共享对象,它暴露了两个函数AB.
应该发生的是ODBCMis调用函数A,函数A是调用函数B.
什么是实际发生的情况是,当函数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
  ... 
}
Run Code Online (Sandbox Code Playgroud)

变化缓慢,感觉很糟糕.

R..*_*R.. 7

尝试将您.so-Bsymbolic链接选项链接起来(传递-Wl,-Bsymbolicgcc命令行).这会在链接时绑定所有库内部符号,以便以后不会进行任何动态链接.