gccまたはg ++で使用される静的ライブラリはどこに保存され、どのように識別されますか?

gccまたはg ++で使用される静的ライブラリはどこに保存され、どのように識別されますか?

私はUbuntu(Linux)システムに静的ライブラリがあることを確認しようとしてきました。いつ発見され、どのサフィックスがこれを識別しますか?

答え1

UbuntuなどのDebian派生システムでは、システムに付属の静的ライブラリ(手動ではなく/経由aptでインストールされています)には通常サフィックスが付いています。dpkg/usr/lib/<target-triplet>/.a

たとえば、私のx86-64 debianシステムでは、次のようになります。

$ ls /usr/lib/x86_64-linux-gnu/*.a
/usr/lib/x86_64-linux-gnu/libBrokenLocale.a
/usr/lib/x86_64-linux-gnu/libFS.a
/usr/lib/x86_64-linux-gnu/libGLU.a
/usr/lib/x86_64-linux-gnu/libICE.a
/usr/lib/x86_64-linux-gnu/libImlib2.a
...

apt-get install <package>-dev*.soこれらのライブラリは通常動的ライブラリとともにインストールされます。

それにもかかわらず、ライブラリを直接インストールするいくつかのパッケージがあります/usr/liblibgraphicsmagick1-dev

コンパイラは、以下にいくつかの「内部」ライブラリ(など)が好きでインストールします。gccたとえば、次のようになります。clanglibstdc++/usr/lib/<compiler-name>/...

/usr/lib/gcc/x86_64-linux-gnu/6.3.0/libgcc.a

他のディストリビューションは異なるルールに従うことができます。たとえば、rhel / centosでは、すべての開発ライブラリが/usr/lib64/またはによって/usr/lib32/コンパイルされます。コンパイルファイルは、静的であるか動的であるかにかかわらず、コンパイラがライブラリを見つける場所を常に正確に伝えます。<package>-devel-*gcc -v

関連情報