2

共有ライブラリを読んだときに、これらの疑問が浮かび始めました..

1.----------------------------------------------- すでに次のようにコンパイルしたとします。下、

test  : main.o libtest.so.2
  gcc main.o -L ../../lib -ltest -o test
libtest.so.2  : version2.c
  gcc -Wall -fPIC -c version2.c
  gcc -shared -Wl,-soname,libtest.so -o libtest.so.2.0 version2.o
  ln -sf libtest.so.2.0 libtest.so
  mv libtest.s* ../../lib
main.o  : main.c
  gcc -c main.c

-ltest を指定すると、ライブラリは常に libtest.so へのソフト リンクになります。正しい ?では、別のバイナリ用に上位バージョンの libtest を使用し、前者に古いバージョンが必要な場合はどうすればよいでしょうか? どうすればこれを処理できますか。

2.------------------------------------------------ ------------------------- 私はいくつかのライブラリを持っていますが、それらを LD_LIBRRAY_PATH に含めたくありません。それらに完全に関連する。

4

1 に答える 1

0

1.-soname でバージョンを設定する必要があります。

gcc -shared -Wl,-soname,libtest.so.2 -o libtest.so.2.0 version2.o

次に、リンカは前者を libtest.so の「任意のバージョン」ではなく「libtest.so.2」にバインドします。


2.アプリの起動時にのみLD_LIBRARY_PATHを設定します。シェルスクリプトを作成できます。

LD_LIBRARY_PATH=/path/to/your/libs ./my_app
于 2013-04-07T19:03:26.520 に答える