部署使用PCRE库的C app

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

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

我知道我可以通过在目标计算机上安装PCRE lib来使其工作。 但是,我想知道是否有更方便的方法呢? (只是复制一些lib文件?)

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

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

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

正如@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 ?)。

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

 LD_LIBRARY_PATH=. ./your_program 

检查程序库如何操作