为什么我的程序找不到"/usr/local/lib"中的库文件?

我使用的是Ubuntu 10.10,刚刚将opencv升级到2.4.2。

问题是每次我打开一个新的shell并尝试编译和运行时,由于以下错误,它会编译但无法运行:

./a.out: error while loading shared libraries: libopencv_calib3d.so.2.4: cannot open shared object file: No such file or directory

就我所看到的,这个文件位于 /usr/local/lib/!
在运行之前,我可以通过运行以下命令来使其运行:
export LD_LIBRARY_PATH=/usr/local/lib

怎么解决这个问题?

http://unix.stackexchange.com/questions/67781/use-shared-libraries-in-usr-local-lib - Ciro Santilli OurBigBook.com
1个回答

/usr/local/lib 不在默认的 Ubuntu 路径中。您应该将其添加到 LD_LIBRARY_PATH 环境变量的末尾,位于 /etc/environment 文件中。重新启动后,新路径将生效。

您还可以在每个用户的 ~/.bashrc 文件中进行个别设置。

示例(/etc/environment)

LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib

示例(~/.bashrc)

export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib"

12我点赞了,但实际上以 root 用户身份运行 ldconfig 似乎是"正确"的方法:http://askubuntu.com/a/350076/221408 - j_random_hacker
最好不要永久设置LD_LIBRARY_PATH - Eliah Kagan
我给@j_random_hacker的ldconfig回答点了个踩(也点了个赞),因为LD_LIBRARY_PATH几乎总是错误的解决方案,应该附带详细的注意事项。只需输入sudo ldconfig即可。 - jma