11

バージョンの違いにより、ターゲット システムのライブラリを使用するのではなく、自分のプログラムと共に共有ライブラリを提供したいと考えています。

ldd私のプログラムはこれらの共有ライブラリを使用していると言います:

linux-gate.so.1 =>  (0xf7ef0000)**(made by kernel)**  
libc.so.6 => /lib32/libc.so.6 (0xf7d88000)**(libc-2.7.so)**  
/lib/ld-linux.so.2 (0xf7ef1000)**(ld-2.7.so)**

次のようにコンパイルして、ld-xxx.so を正常にリンクしました。

gcc -std=c99 -D_POSIX_C_SOURCE=200112L -O2 -m32 -s -Wl,-dynamic-linker,ld-2.7.so myprogram.c

しかし、うまくリンクできていませんlibc-xxx.so。どうやってやるの ?

4

2 に答える 2

15

私はそれを行う方法を見つけました:

rpath は、提供されたライブラリが配置されている場所を指定します。このフォルダにはlibc.so.6、 、libdl.so.2libgcc_s.so.1およびその他のファイルが含まれている必要があります。strace を使用して、バイナリ ファイルが使用しているライブラリを確認してください。

ld.so提供されたリンカーです

gcc -Xlinker -rpath=/default/path/to/libraries -Xlinker -I/default/path/to/libraries/ld.so program.c

于 2011-04-30T12:45:24.253 に答える
9

-nodefaultlibsor-nostdlibを gcc に渡すと、デフォルト ライブラリを引数として ld に渡さないように指示されます。これで、リンクしたい libc を明示的に指定できるようになります。gcc(1)両方のオプションに関する詳細と注意事項については、man ページを参照してください。

于 2010-04-28T13:44:27.853 に答える