0

glibc-2.18 をホーム ディレクトリにインストールし、それに対してアプリケーションをリンクしたいと考えています。

$ g++ -pthread -o tsx_test tsx_test.cpp -Wl,--rpath=/home/hl/lib/ \
  -Wl,--dynamic-linker=/home/hl/lib/ld-linux-x86-64.so.2

g++4.7.3 を使用すると、コンパイルとリンクは正常に機能しますが、実行すると失敗します。

$ ./tsx_test
./tsx_test: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

/usr/lib/x86_64-linux-gnu/libstdc++.so.6 は確実に存在します。「--rpath」なしでコンパイルすると、同じ libstdc++.so.6 がリンクされ、すべて正常に動作します。

$ ldd tsx_test
linux-vdso.so.1 =>  (0x00007fff42bd4000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f42aa3aa000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f42aa194000)
libpthread.so.0 => /home/hl/lib/libpthread.so.0 (0x00007f42a9f75000)
libc.so.6 => /home/hl/lib/libc.so.6 (0x00007f42a9bc8000)
libm.so.6 => /home/hl/lib/libm.so.6 (0x00007f42a98c5000)
/home/hl/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f42aa6c9000)
4

1 に答える 1

1

/usr/lib/x86_64-linux-gnu/libstdc++.so.6 は確かに存在します

...しかし、あなたのlibcはそこに見えません。

RPATH を次のように設定することもできます: -Wl,-rpath=/home/hl/lib:/usr/lib、または/home/hl/etc/ld.so.conflibc を編集して/usr/lib( after /home/hl/lib ).jを参照するように指示することもできます。

これはパーミッションの問題ですか? root 所有のライブラリとユーザー所有のライブラリを混在させることはできませんか?

いいえ。間違いなく、ルート所有のライブラリとユーザー所有のライブラリを混在させることができます。

于 2013-08-15T21:39:21.020 に答える