5

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まだ実行されています。

本に記載されているエラーを取得する方法を教えてください。はい、エラーが欲しいので、誤解したことを理解します。

4

1 に答える 1

3

私のコメントに対するあなたの反応から:

linux-gate.so.1 => (0xb7746000)
libgmp.so.10 => /usr/lib/i386-linux-gnu/libgmp.so.10 (0xb76c5000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7520000)
/lib/ld-linux.so.2 (0xb7747000) 

したがって、プログラムは から lib を取得してい/usr/libます。

あなたがしようとすることができるのは、あなたのライブラリの名前を変更/opt/libし、新しい名前に対してリンクすることです。

mv /opt/lib/libgmp.so /opt/lib/libgmp-test.so
gcc hello.c -I/opt/include -L/opt/lib -lgmp-test

次に、プログラムを実行してみます。lddまた、新しい結果と以前の結果を比較しa.outてください。

于 2012-07-08T18:18:37.497 に答える