1

静的ライブラリに対してリンクする共有ライブラリ(実際にはPythonモジュール)を作成しようとしています。両方のライブラリは同じプロジェクトの一部であり、cmakeを使用して構築されています。

これで、共有ライブラリは次のように構築されます。


add_library(MyLibPython SHARED ${PYTHON_WRAPPERS_SRC})
set_target_properties(MyLibPython PROPERTIES PREFIX "")
target_link_libraries(MyLibPython MyLibStatic ${LIBS})

これはエラーなしでビルドされますが、Pythonモジュールをインポートしようとすると、次のようになります。

ImportError:
lib / python / MyLibPython.so:未定義のシンボル:_Zone_of_my_MyLibStatic_functions

同様の方法で構築された実行可能ファイル(単体テスト)もいくつかあり、それらは完全に機能します。

追加する必要があります。これはLinuxでgccを使用しています。

4

1 に答える 1

2

リンカのコマンドラインを確認してください。それは次のようなものを通過してい-Wl,--as-neededますか?その場合、静的ライブラリに必要なすべてのものが含まれていない可能性があります。

あなたのテクニックは一般的に移植可能ではないと思います。リンクする共有ライブラリを入手できますか?共有ライブラリに入るすべてのものをPICとしてコンパイルする必要があるプラットフォームがいくつかあると思います。

とにかく、アーカイブ全体をGNU ldにリンクするには(ルックアップman ld):

gcc -o foo foo.o bar.o baz.o -Wl,--whole-archive libfoo.a -Wl,--no-whole-archive [rest-of-linker-args]
于 2010-11-18T22:57:55.190 に答える