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