C++ 在/usr/local/lib中找不到库
我正在使用一个名为的框架构建一个应用程序。 构建框架后,可以通过C++ 在/usr/local/lib中找不到库,c++,eclipse,build,linker,libraries,C++,Eclipse,Build,Linker,Libraries,我正在使用一个名为的框架构建一个应用程序。 构建框架后,可以通过makeinstall安装框架。默认情况下,库安装在/usr/local/[lib | include]文件夹中。嗯 我正在使用eclipse进行开发。为了使用这些库,我必须设置库的include路径(在本例中为usr/local/include/ohNet),设置链接器搜索路径(-L)(/usr/local/lib/ohNet)和特定库(-L)(在本例中,我选择了一个名为libohNet.so,它位于该文件夹中。 当我在eclip
makeinstall
安装框架。默认情况下,库安装在/usr/local/[lib | include]
文件夹中。嗯
我正在使用eclipse进行开发。为了使用这些库,我必须设置库的include路径(在本例中为usr/local/include/ohNet
),设置链接器搜索路径(-L)(/usr/local/lib/ohNet
)和特定库(-L)(在本例中,我选择了一个名为libohNet.so
,它位于该文件夹中。
当我在eclipse中构建项目时,它工作正常,但是如果我尝试运行该程序,我会遇到以下消息:
error while loading shared libraries: libohNet.so: cannot open shared object file: No such file or directory
我仔细检查了一下,文件libohNet.so
就在这个目录下!
找不到此文件的原因是什么
我在谷歌上搜索了一些帖子,说库被安装到/usr/local/lib
而不是/usr/lib
中是有问题的。。。
我是否必须在eclipse
中配置一些附加设置才能使ld
识别此路径中的库?解决方案是什么
这是一个运行时错误,而不是生成错误。设置
-L
标志对运行时链接器没有任何作用。您需要做的是告诉运行时加载程序也在/usr/local/lib中查找库。您可以通过两种方法来完成。第一种方法是将路径添加到LD\u LIBRARY\u path
环境变量:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
不过,我不建议您这样做。当您将库与可执行文件(可能与安装程序一起)一起提供时,rpath很有用,相对rpath(使用
rpath$ORIGIN
功能)或绝对rpath(例如,在/opt中安装时)然后用于在运行时查找捆绑的lib。将-L/usr/local/lib
添加到链接器行。我已经将链接器搜索路径设置为/usr/local/lib/ohNet
,然后您需要检查您是否可以实际读取该文件,并且该文件的类型是否正确。因此,文件-例如,混合32位和64位?谢谢您的推荐如果我的库位于/usr/local/lib(例如/usr/local/lib/ohNet)的子文件夹中我必须将每个路径添加到子文件夹中。有没有办法让运行时加载程序递归地在/usr/loal/lib中搜索?@user1291235您必须在自己的行中分别添加每个路径。@user1291235我忘了提到rpath链接选项。在您的情况下,我不建议这样做,但很高兴知道这一点,所以我将其添加到了答案。@NikosC。我只是想登录让您知道,ldconfig
行刚刚为我节省了几个小时的工作。由于我无法理解的原因,从源代码安装未能重新加载缓存,因此找不到我的库。请向上投票!请注意,您应该已经在/e中定义了/usr/local/lib
tc/ld.so.conf.d/libc.conf
。该文件来自libc-bin
。如果您移动了库,运行ldconfig
会将其唤醒。
/usr/local/lib
/etc/ld.so.conf.d/99local.conf
/usr/local/lib
ldconfig
-Wl,-rpath=/usr/local/lib