STATIC libを呼び出すEXEを持つ1つの作業プロジェクト(P1)があります。 Windows、MAC、Linux上でコンパイルして正常に実行します。CMakeプロジェクトは、SHAREDライブラリをコンパイルしてもSTATICライブラリではない
今、別のSTATICライブラリを呼び出すSTATICライブラリを呼び出すEXEを持つ2番目のプロジェクト(P2)があります。この場合、WINDOWSとMACでは正常に動作しますが、Linuxでは、リンク時には多くの参照が見つかりません。私はチェックしました:
- libsがあることを確認しました。 OK
- コンパイラがそれらにアクセスできること。 OK。
- P1とP2のCMakeファイルは似ています。 OK。
- コンパイラのフラグとコマンドは似ています。 OK。
私は絶望的でした。私は単純にlibsをSTATICからSHAREDに切り替えました。そして今、Linux上でうまくコンパイルされます。基本的には、add_library(lib STATIC ...)
をadd_library(lib SHARED ...)
に変更したところ、すべて正常に機能しました。
私はSHAREDでは動作していますが、STATICでは動作していないということを知りません。
ありがとうございました。 よろしくお願いいたします。
さて、私はもう一度チェックしますが、両方のライブラリがCMake target_link_librariesに追加されています...私はちょうど探し始める手がかりがありません。あなたの提案をありがとう! – Korchkidu
これは、target_link_libraries(lib2 lib1)とtarget_link_libraries(EXE lib1 lib2)のようなことをしなければならないようです...あなたには意味がありますか? – Korchkidu
はい、それは私の意味です。 lib2に必要なシンボルだけが解決されるので、実行可能ファイルを_both_静的ライブラリとリンクする必要があります(両方とも静的ライブラリであれば、lib1をlib1にリンクすることはできません)。 –