2017-01-16 21 views
0

次のコマンドを使用してプログラムをコンパイルすると、静的または動的ライブラリに対してリンクしていますか?第二に、このライブラリはPPAから「インストール」だった静的または動的ライブラリに対してC++をコンパイルする

g++ blink.cpp -o blink -lmraa 

ライブラリは、静的または動的である場合

sudo add-apt-repository ppa:mraa/mraa 
sudo apt-get update 
sudo apt-get install libmraa1 libmraa-dev mraa-tools python-mraa python3-mraa 

これらのコマンドを使用して、どのように伝えることができますか?

答えて

0

次のコマンドを使用してプログラムをコンパイルすると、スタティックライブラリまたはダイナミックライブラリとリンクしていますか?

man ldを参照してください:

-l namespec

--library = namespec

はリンクするファイルのリストにnamespecによって指定されたアーカイブファイルまたはオブジェクトファイルを追加します。このオプションは任意の回数使用できます。 namespecの形式が:filenameの場合、ldはライブラリパスでfilenameというファイルを検索します。そうでなければ、ライブラリパスでlibnamespec.aというファイルを検索します。

共有ライブラリをサポートするシステムでは、ldはlibnamespec.a以外のファイルも検索することがあります。具体的には、ELFとSunOSシステムでは、libnamespec.aというディレクトリを検索する前に、libnamespec.soというライブラリをディレクトリから検索します。 (慣例により、 ".so"拡張は共有ライブラリを示します)。この動作は、filenameには当てはまりません。filenameは常にfilenameというファイルを指定します。

LinuxはELFシステムです。したがって、リンカはを最初に検索し、次に.aを検索します。


ライブラリは、静的または動的である場合はどのように伝えることができますか?

これは両方とも、バスト可能性が最も高い.soです。これらのパッケージを構成するファイルを確認する必要があります。

結果として得られる実行可能ファイルまたは共有ライブラリでldd <executable>を呼び出し、必要な共有ライブラリを確認することもできます。

+0

多くのご協力ありがとうございます – scalauser

関連する問題