2016-06-20 3 views
1

私はブーストロガーライブラリを使用するQtアプリケーションを持っています。私はそれをスタンドアローンにしたい。しかし、静的リンクのライブラリを管理した後も、アプリケーションは依然としてブーストライブラリに依存しています。私は含ま ライブラリは、以下のとおりです。ブーストロガー静的リンク:動作していません

..../boost_1_61_0_b1/stage/lib/libboost_regex.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_log_setup.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_thread.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_log.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_system.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_filesystem.a 

アプリケーションのコンパイル(無数の試行後)。しかし、lddツールを使用すると、依存関係リストにライブラリが追加されて表示されます。

注:BOOST_ALL_DYN_LINKを定義する必要があります。それ以外の場合、リンクされません。

このマクロを使用せず、依存関係の問題を克服する方法はありますか?そうでない場合は、この問題を回避するためにどのような解決策を提案しますか?

+1

すべての追加ライブラリを静的ライブラリとして第1位にコンパイルします。私はかなりあなたがそれを達成するために使用できるbjamオプションがあると確信しています。 –

+0

しかし、私は/ stage/libsの下に.aと.soファイルの両方を持っています。私はそれらを分割する必要がありますか? –

答えて

0

デフォルトでは、現代のUNIXライクなシステムでは、gccはデフォルトで共有ライブラリとリンクしています。静的リンクを強制するには、あなたのリンクコマンドラインに-staticを追加するか(またはdocsを参照)、gccが共有ライブラリを見つけられないことを確認するか、静的ライブラリのみを見つけます(たとえば、共有ライブラリを別のディレクトリに移動しますあなたのプロジェクトをリンクしています)。 -staticは、libstdC++を含め、すべてのライブラリを静的にリンクすることに注意してください。

-lスイッチを使用せずに、静的ライブラリを直接指定することもできます。あなたはしかし、ライブラリへの完全なパスを使用する必要がありますので、代わりに

gcc ... -lboost_log ...

のあなたはどのような場合には

gcc ... ..../boost_1_61_0_b1/stage/lib/libboost_log.a ...

を記述します。このマクロは、正確を意味するので、あなたはBOOST_ALL_DYN_LINKを定義するべきではありません反対 - あなたはブーストと共有するつもりですライブラリ。

+0

私はbjam -staticを試してから、.aライブラリにリンクしていました。私はそれがQt .proの問題かどうかわかりませんが、同じパスに.aと.soの両方のライブラリがあった場合、そうでなければ指定されていても.soにリンクしているようです。とにかく、ありがとう –

関連する問題