Introduction to GCC を読んでいて、パッケージに .a と .so の両方が含まれているかどうかが書かれています。gcc は共有ライブラリを好みます。デフォルトでは、ローダーは、 や などの事前定義されたシステム ディレクトリのセットでのみ共有ライブラリを検索し/usr/local/lib
ます/usr/lib
。ライブラリがこれらのディレクトリのいずれにもない場合は、ロード パスに追加するか、-static
オプションを使用して .a ライブラリを強制的に使用する必要があります。ただし、次のことを試しました。
vim hello.c:
#include <gmp.h>
#include <stdio.h>
int main() {
mpz_t x;
mpz_init(x);
return 0;
}
gcc hello.c -I/opt/include -L/opt/lib -lgmp (my gmp library is in opt)
./a.out
そして、それは実行されます。この本には、次のエラーがあるはずだと書かれています。
./a.out: error while loading shared libraries:
libgdbm.so.3: cannot open shared object file:
No such file or directory
(まあ、この本では例としてGDBMを使用していますが、私はGMPを使用しましたが、これは関係ありませんよね?)
ただし、設定していませLD_LIBRARY_PATH=/opt/lib
ん。ご覧-static
のとおり、オプションも使用していませんが、a.out
まだ実行されています。
本に記載されているエラーを取得する方法を教えてください。はい、エラーが欲しいので、誤解したことを理解します。