2016-03-31 4 views
2

私は動的共有ライブラリーとして使用するブースト依存関係を使用していますが、ブースト依存関係は必要ありません。どのくらい私はそれについて行くのですか?共用ライブラリーにパックを追加

私は私のコードをコンパイルしています:

linux-vdso.so.1 (0x00007fffda9df000) 
libboost_system.so.1.60.0 => /usr/lib/libboost_system.so.1.60.0 (0x00007f934e776000) 
libboost_serialization.so.1.60.0 => /usr/lib/libboost_serialization.so.1.60.0 (0x00007f934e538000) 
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f934e1b6000) 
libm.so.6 => /usr/lib/libm.so.6 (0x00007f934deb0000) 
libc.so.6 => /usr/lib/libc.so.6 (0x00007f934db0f000) 
/usr/lib64/ld-linux-x86-64.so.2 (0x000055802a452000) 
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f934d8f9000) 
librt.so.1 => /usr/lib/librt.so.1 (0x00007f934d6f0000) 
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f934d4d3000) 

ldd lib/myclass.so.1 

は出力を生成しかし、構築されたライブラリは、ブーストの依存関係のカップルを示し

g++ -Wall -fPIC -o myclass.o -c myclass.cpp 
g++ -shared -Wl,-soname,myclass.so.1 -o lib/myclass.so.1 myclass.o -lc 

すべてのboost依存関係を.soファイルにまとめるために、g++呼び出しで何を変更する必要がありますか?

答えて

1

「.so」を別の.soの中に「入れる」ことはできません。共有ライブラリの代わりに静的ライブラリにリンクする必要があります。

ほとんどのLinuxディストリビューションには、共有ライブラリの静的リンクバージョンを含むオプションの「開発」サブパッケージが含まれています。

あなたはそのパッケージをインストールして、自分のライブラリのリンク方法を完全に変更する必要があります。代わりに、例えば、あなたが「/usr/lib64/libboost_system.a」に対する明示的なリンクでこれを交換する必要があります

-lboost_system 

とのリンク、またはlibboost_system.aはどこにインストールされています。あなたが直接リンクするブーストライブラリだけでなく、それらのライブラリ自体がリンクしている他のすべてのブーストライブラリと一緒に、泡立てて、リンスして、リピートしてください。

詳細については、お使いのLinuxディストリビューションのドキュメントを参照してください。静的にリンクされた共有ライブラリのバージョンがパッケージ化されています。

+0

私はソースからboostをコンパイルし、静的ライブラリを同じディレクトリに置いていますので、makefileを変更するだけです。 – joaocandre

関連する問題