プロジェクトでCMakeを使用していますが、いくつかのライブラリを静的にリンクしようとしています。CMakeと静的リンク
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
set_target_properties(icarus PROPERTIES LINK_SEARCH_END_STATIC 1)
をそして、私は彼らの* .Aバージョンを持っている実際のライブラリを探していたとき、私は確信して作った: 私は設定しました。現在
プロジェクトのインポート:
libPocoNet.a
libPocoUtil.a
libPocoXML.a
libPocoFoundation.a
libmysqlclient.a
libmysqlpp.a
libcrypto++.a
CUDA
すべてのライブラリが発見され、ダイナミック/共有連携を行うとき、彼らは正常に動作。
set(GCC_CXX_FLAGS ${GCC_CXX_FLAGS} "-static-libgcc -static-libstdc++ -static")
しかし、無駄に: 私はまた、コンパイルフラグを設定しようとしています。ないように特定の順序で
undefined reference to `mysql_thread_init'
undefined reference to `mysql_real_query'
undefined reference to `pthread_mutex_unlock'
undefined reference to `Poco::ErrorHandler::handle()'
を、各ライブラリーのための多数のエラー:コンパイル中に、私は何の問題を取得しませんが 、リンケージはすなわち、上記図書館で見つかったコールのために未定義参照のエラーをたくさん投げています。 GCCの最後の行を見ると
は、私が参照してください。- なぜポコライブラリは-rdynamicとしてリンクされている、と何-Wl -Bstaticフラグはありません。私に不思議になり
/usr/bin/c++ -g -g -static-libgcc -static-libstdc++ -static [list of *.cpp files] -o icarus -rdynamic /usr/local/lib/libPocoFoundation.a /usr/local/lib/libPocoNet.a /usr/local/lib/libPocoUtil.a /usr/local/lib/libPocoXML.a -Wl,-Bstatic -lmysqlclient -lmysqlpp -lcrypto++
?あたかも静的リンケージからスキップ/除外されているかのように。
- はmysqlclient、静的リンク用に設定されているように見える++ mysqlppや暗号、まだ私はまだので、エラー
を取得し、誰かが私に説明してくださいできます
- I部分の静的リンクの設定を行う方法CMakeを使用する
- 設定する必要があるのはCMAKE_EXE_LINKER_FLAGSだけですか?
- 上記のライブラリでは静的リンクを強制するべきですが、プロジェクト全体では強制的にリンクする必要がありますか?
あまりにも多くの、またはあまりにもローカライズされた質問がある場合は、私はこれを試していない、と私はネット上の多くの情報を見つけるように見えることはできません。
"/ usr/bin/ld:CentOS 7でビルドできません" –
@MikeM Cライブラリがインストールされていないとは思えません。おそらく、あなたのライブラリのパスをエクスポートする必要がありますか? –
移植性を気にするならば、私は良いファイルではないので、私はadd_library(..)を通して.aファイルへのパスをハードコーディングしてしまいました。それは私のために働いていました(ヘッダと静的ライブラリの両方に) –