次の問題があります: Qt アプリケーションにいくつかの共有 (.so) ライブラリをリンクしていますが、それらのライブラリの一部には、自動生成された gSoap ソース ファイルである soapC.cpp ファイルが含まれています。soapC.cpp ファイルは、さまざまな .so ライブラリでまったく同じではありませんが、同じ関数が多数含まれています。それらを foo() と呼びましょう。
アプリケーションをビルドするとき、これらすべてのライブラリを特定の順序でリンクします。たとえば、lib1.so、lib2.so、lib3.so などとします。コンパイルはスムーズに実行されます (g++ コンパイラ v. 4.6 を使用しています)。 .
しかし、アプリケーションを実行すると、lib3.so などのコードが lib3.so で定義されている foo() を呼び出そうとすると、何らかの理由で lib1.so の foo() が代わりに呼び出されることに気付きました。これにより、問題が発生し、アプリケーションのセグメンテーション違反が発生します。
私の質問は、コンパイラに渡すことができる c++/linker オプションがあるかどうかです。これにより、アプリケーションの実行時に、lib3.so から実際に foo() が呼び出され、実行され、実行されなくなります。 lib1.so からの foo() ? 私は -Bsymbolic と -Bsymbolic-functions を試していましたが、うまくいきませんでした。
これに対する可能な解決策は名前空間を使用することですが、コードが非常に複雑であるため、これはむしろ最後の可能な解決策です。これに対する迅速かつ簡単な解決策があれば、それは素晴らしいことです。ところで。私はUbuntuでこれを行っていますが、Windowsでは同じコードが完全に機能し、本来あるべきことを行います...