3

我编写了一个使用 PCRE 库的 C 应用程序。一切都在我自己的电脑上运行。但是,当我将二进制文件复制到另一台计算机并运行它时,会出现以下错误:

/libexec/ld-elf.so.1:找不到共享对象“libpcre.so.0”,“myapp”需要

我知道我可以通过在目标计算机上安装 PCRE 库来让它工作。但是,我想知道是否有更方便的方法来做到这一点?(只是复制几个lib文件?)

我试图复制 libpcre.so.0 文件,但没有成功。

任何帮助表示赞赏!谢谢,

4

3 回答 3

2

最好安装它或静态链接它。当然,前者在资源上更轻。确保兼容性的最佳方法是为目标系统构建包,指定所有依赖项(当然取决于发行版)。

于 2009-08-27T21:38:43.110 回答
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?)。

于 2009-08-27T21:56:03.577 回答
0

您应该能够复制它,然后将 envvar LD_LIBRARY_PATH 设置为它所在的文件夹,或者甚至创建一个设置此 envvar 的 shell 脚本,然后按如下方式启动您的程序

LD_LIBRARY_PATH=. ./your_program

检查程序库如何

于 2009-08-27T21:50:17.440 回答