1

独自の共有ライブラリを多数使用するプロジェクトを作成しています。私の意図は、ディレクトリ内にライブラリ名を作成することです. /bar (/usr/lib/libfoo/bar.so または /opt/lib/libfoo/bar.so などを見つけるため)。

私はテストするために本当に小さなコードを作りました:

const char *mylib(void) {
  return "it woooorks! =D";
};

そしてそれをコンパイルしました: gcc -fPIC -shared -Wl,-rpath,libfoo/ lib.c -o /usr/lib/libfoo/bar.so.

次に、テスト プログラムで を使用しgcc -lfoo/bar test.c、コンパイルします (mylib()ライブラリからシンボルが見つかります) が、プログラムを実行しようとすると ( ./a.out)、ダイナミック リンカはライブラリが見つからないと文句を言います。私の場合、Mac OS X Lion を使用しています。

dyld: Library not loaded: bar.so
  Referenced from: /Users/takanuva/tmp/lib/./a.out
  Reason: image not found
Trace/BPT trap: 5



私は何を間違っていますか?おそらく答えは「すべて」なので、ライブラリパスで libfoo.so の代わりに libfoo/bar.so を探すために、どのように目的の効果を達成する必要がありますか?

前もって感謝します。:)

4

1 に答える 1

0

ライブラリが標準パスに配置されていない場合 (および /opt が通常は検索されないパスである場合)、 のように -L/-rpath を使用してパスを指定する必要がありますgcc blah.c -L/opt/whatever -Wl,-rpath,/opt/whatever -lbar-l引数でパス区切り記号を使用しないでください。

于 2013-01-01T08:37:34.720 に答える