我写了一个使用PCRE库的C app。一切都在我自己的电脑上运行。但是,当我将二进制文件复制到另一台计算机并运行它时,它会出现以下错误:
/libexec/ld-elf.so.1:找不到“myapp”所需的共享对象“libpcre.so.0”
我知道我可以通过在目标计算机上安装PCRE lib来实现它。但是,我想知道是否有更方便的方法吗? (只是复制一些lib文件?)
我试图复制libpcre.so.0文件,但它没有用。
任何帮助表示赞赏! 谢谢,
答案 0 :(得分:2)
最好安装它或静态链接它。当然,前者资源较轻。确保兼容性的最佳方法是为目标系统构建程序包,指定所有依赖项(取决于coursE的分布)。
答案 1 :(得分:2)
正如@hacker所说,您要么必须确保在目标计算机上安装PCRE,要么必须在开发计算机上使用静态库(libpcre.a
而不是libpcre.so
)。这也可能意味着您需要使用静态库构建PCRE,并且必须使用正确的编译时选项来引入静态库。一种相对简单的方法是在编译器命令行上指定/usr/lib/libpcre.a
。理想情况下,您也避免在命令行中包含-lpcre
- 当然,您希望静态库出现在共享库之前。
由于符号链接问题,您的副本可能已失败。您通常会链接到以下文件:
/usr/lib/libpcre.so
但这是版本化库的符号链接,例如:
/usr/lib/libpcre.so.0
或者它可以反过来工作。如果您使用tar
复制内容,则可能已复制了符号链接。
理想情况下,您将PCRE安装在系统目录中 - 但这样做需要root权限。您还必须小心确保不使用旧版本覆盖更新版本的PCRE。您还希望避免强制用户设置LD_LIBRARY_PATH
环境变量(或其等价物),或强制他们使用配置程序(ld.so.conf
?)。
答案 2 :(得分:0)
您应该能够复制它,然后将envvar LD_LIBRARY_PATH设置为它所在的文件夹,甚至可以创建一个设置此envvar的shell脚本,然后启动您的程序,如下所示
LD_LIBRARY_PATH=. ./your_program