我有以下问题:我将几个共享 (.so) 库链接到我的 Qt 应用程序,其中一些包含自动生成的 gSoap 源文件的 soapC.cpp 文件。soapC.cpp 文件在不同的 .so 库中并不完全相同,但它们包含许多相同的函数,我们称它们为 foo()。
当我构建我的应用程序时,我按特定顺序链接所有这些库,比如说 lib1.so、lib2.so、lib3.so 等,并且编译运行顺利(我使用的是 g++ compiler v. 4.6) .
但是,当我运行我的应用程序时,我注意到当一段代码(例如在 lib3.so 中)尝试调用也在 lib3.so 中定义的 foo() 时,由于某些原因,来自 lib1.so 的 foo() 被调用。这会导致麻烦和我的应用程序段错误。
我的问题是,是否有任何 c++/链接器选项可以传递给编译器,这会导致在我的应用程序运行时真正来自 lib3.so 的 foo() 将被执行而不是来自 lib1.so 的 foo()?我没有运气尝试 -Bsymbolic 和 -Bsymbolic-functions。
一个可能的解决方案是使用命名空间,但由于代码非常复杂,这是最后可能的解决方案。如果有一个快速简便的解决方案,那就太好了。顺便提一句。我在 Ubuntu 下执行此操作,在 Windows 下,相同的代码可以完美运行并执行应有的操作...