2

我已经使用以下配置标志在系统和非 root 用户上成功安装了 libcurl:

./configure --prefix=/path/to/lib --exec-prefix=/path/to/lib --bindir=/path/to/lib

一切正常运行编译如下:

gcc -I/path/to/include -L/path/to/lib/ client.c -lcurl -o client

当我尝试运行生成的程序时,问题就出现了。我收到以下错误:

client: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory

我用谷歌搜索了一下,发现它已被报告(并被拒绝)为这里的一个错误,但我仍然不清楚如何解决这个问题。按照响应中的建议使用ldconfig需要root权限,我显然没有。

我能做些什么来让这一切顺利进行吗?看起来这应该很简单,但如果是这样,我就完全想念它了......

4

2 回答 2

2

如果您不想依赖环境变量,可以使用rpath

gcc -I/path/to/include -L/path/to/lib/ client.c -lcurl -Wl,-rpath,/path/to/lib -o client

这将/path/to/lib在可执行文件中进行硬编码,以便动态链接器.so首先在此处搜索。

(还请注意,在一般情况下,使用-rpath被认为是不好的做法:如果 RPATH 目录可由 root 以外的任何人写入,则可能导致安全问题。)

于 2012-11-23T07:41:03.427 回答
1

设置LD_LIBRARY_PATH环境变量以动态告诉您的程序在哪里寻找共享库。在您的情况下,使用 Bourne/bash shell,您可能会执行以下操作:

$ LD_LIBRARY_PATH=/path/too/lib
$ export LD_LIBRARY_PATH
$ ./client

有关详细信息,请参阅共享库 HOWTO。另请注意,通常,您不应该考虑LD_LIBRARY_PATH生产解决方案:您最终希望让系统管理员配置系统加载路径或将库安装在正确的位置。

于 2012-11-23T07:13:03.627 回答