2012-11-23 51 views
2

,使用下面的配置标志:安装的libcurl和非root用户:需要配置,其中代码查找我已经成功地安装了系统和非root用户的libcurl libcurl.so.4

./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 here,但我仍然不清楚如何解决这个问题。按照响应中的建议使用ldconfig将需要root权限,这显然没有。

有什么我可以做的,使这一切工作?看起来这应该很简单,但如果是这样,我完全错过了它...

回答

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目录是任何一个人都比根别人写的,它可能会导致安全问题)

+0

谢谢!为此,这将会很好。 – Dan

1

设置LD_LIBRARY_PATH环境变量来动态地告诉你的程序去哪里查找共享库。在你的情况,与伯恩/ bash shell的,你可以这样做:

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

更多信息请参见Shared libraries HOWTO。另请注意,通常情况下,您不应考虑LD_LIBRARY_PATH生产解决方案:您最终希望让您的系统管理员配置系统加载路径或将库安装在正确的位置。

+0

我希望我能把你们两个都标为正确的答案。 rpath选项最终成为这个特定问题的最佳选择,但知道我可以使用env变量来做同样的事情是很好的。 – Dan

+1

我完全忘了'rpath'! @Schnouki有正确的解决方案,你标志着正确的解决方案。 :-) – ckhan

相关问题