繁体   English   中英

安装 libcurl 和非 root 用户:需要配置代码在何处查找 libcurl.so.4

[英]Installing libcurl and non-root user: need to configure where code looks for libcurl.so.4

我已经使用以下配置标志成功地在系统和非 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

我GOOGLE了一下周围,发现它已经被报道(和拒绝)作为一个bug在这里,但我仍然不清楚如何解决这个问题。 按照响应中的建议使用ldconfig需要 root 权限,而我显然没有。

有什么我可以做的事情吗? 看起来这应该很简单,但如果是这样,我就完全错过了......

如果不想依赖环境变量,可以使用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 以外的任何人写入,则可能会导致安全问题。)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM