2013-01-13 23 views
2

如何正确链接我使用的Fedora Core 16和尝试编译程序与嵌入Perl如何正确的链接程序如下方式:与libperl.so</p> <p>libperl.so

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) 

是的,我可以设置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

回答

3

添加-Wl,-rpath -Wl,/usr/lib/perl5/CORE(链接时)应该有所帮助。

2

您需要在运行时设置LD_LIBRARY_PATH对于动态链接如何正确的链接程序找到libperl

LD_LIBRARY_PATH=/usr/lib/perl5/CORE ./program