2

libperl.soとのリンクがどれほど正しいか

私はFedoraCore16を使用し、perlを埋め込んだプログラムを次のようにコンパイルしようとしています。

gcc -W -Wall -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -I. -I/usr/include -I/usr/lib/include -I/usr/lib/perl5/CORE -c program.c
gcc -L/lib -L/usr/lib/perl5/CORE -lperl -o program.run program.o

プログラムを実行しようとすると、次のメッセージが表示されます。

error while loading shared libraries: libperl.so: cannot open shared object file: No such file or directory

次のコマンド「lddprogram.run」を実行すると、コンソールに出力されます

ldd ./program.run 
    linux-gate.so.1 =>  (0xb7751000)
    libperl.so => not found
    libc.so.6 => /lib/libc.so.6 (0x4eea5000)
    /lib/ld-linux.so.2 (0x4ee80000)

はい、LD_LIBRARY_PATH環境変数を設定でき、プログラムは機能しますが、「/ usr / bin / perl」に対して同じコマンドを実行すると、特定の環境変数を設定せずにライブラリが見つかります。

ldd `which perl`
    linux-gate.so.1 =>  (0xb77f4000)
    libperl.so => /usr/lib/perl5/CORE/libperl.so (0xb767b000)
    libresolv.so.2 => /lib/libresolv.so.2 (0x4f22f000)
    libnsl.so.1 => /lib/libnsl.so.1 (0x42eaf000)
    libdl.so.2 => /lib/libdl.so.2 (0x4f055000)
    libm.so.6 => /lib/libm.so.6 (0x4f085000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0x41ee6000)
    libutil.so.1 => /lib/libutil.so.1 (0x42ecc000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x4f05c000)
    libc.so.6 => /lib/libc.so.6 (0x4eea5000)
    /lib/ld-linux.so.2 (0x4ee80000)
    libfreebl3.so => /lib/libfreebl3.so (0x42492000)

libperl.soとのリンクプログラムがどれほど正しいか

4

2 に答える 2

3

追加-Wl,-rpath -Wl,/usr/lib/perl5/CORE(リンク時)が役立つはずです。

于 2013-01-13T21:13:58.570 に答える
2

LD_LIBRARY_PATH動的リンカーが見つけるには、実行時に設定する必要がありますlibperl

LD_LIBRARY_PATH=/usr/lib/perl5/CORE ./program
于 2013-01-13T21:13:21.520 に答える