c - 如何正确链接程序与 libperl.so

标签 c perl

如何正确链接 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

最佳答案

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

关于c - 如何正确链接程序与 libperl.so,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14308195/

相关文章:

perl - 在 perl 5.8.8 中模拟反引号运算符

C代码优化,流畅的功能

perl - 按值和键对哈希进行排序(按顺序)

perl - 我可以将这个 Perl 组合到一个单独的 map-grep 链中吗?

regex - 为什么 "Year 2010"=~/([0-4]*)/导致 $1 中的空字符串?

arrays - 为什么 print 在有和没有换行的情况下给出不同的输出?

C - 将结构设置为 null(赋值中的类型不兼容)

c - 我的 C 程序有什么问题?

c - 分段故障。为什么这个指针指向无效地址?

c - 如何在 gcc 中检查 quiet NaN?