如何正确链接libperl.so
我使用Fedora Core 16并尝试使用嵌入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
如果执行以下命令'ldd program.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
答案 0 :(得分:3)
添加-Wl,-rpath -Wl,/usr/lib/perl5/CORE
(链接时)应有所帮助。
答案 1 :(得分:2)
您需要在运行时设置LD_LIBRARY_PATH
,动态链接器才能找到libperl
:
LD_LIBRARY_PATH=/usr/lib/perl5/CORE ./program