我正在使用称为ohNet的框架来构建应用程序。构建框架后,可以通过安装框架make install
。默认情况下,库安装在/usr/local/[lib|include]
文件夹内。好的。
我正在使用Eclipse进行开发。为了使用这个库我必须设置包含路径库(在这种情况下usr/local/include/ohNet
),设置链接的搜索路径(-L)( /usr/local/lib/ohNet
)和特定的库(-l)(在这种情况下,我选择了一个名为库libohNet.so
其是此文件夹中。当我在Eclipse中构建它工作正常的项目,但如果我尝试运行我面对以下消息PROGRAMM:
error while loading shared libraries: libohNet.so: cannot open shared object file: No such file or directory
我已经仔细检查过了,该文件libohNet.so
在此目录中!找不到此文件的原因是什么?
我在google上搜索并找到了一些帖子,说是将库安装到那里/usr/local/lib
而不是在/usr/lib
这里看到是有问题的。我是否必须在其中配置一些其他设置eclipse
以使ld
该路径识别库?有什么解决方案?
问候
这是运行时错误,而不是构建错误。设置-L
标志对于运行时链接程序没有任何作用。您需要做的就是告诉运行时加载程序也在/ usr / local / lib中查找库。您可以通过两种方式做到这一点。首先是将路径添加到LD_LIBRARY_PATH
环境变量:
出口LD_LIBRARY_PATH =“ $ LD_LIBRARY_PATH:/ usr / local / lib”
第二个是更新运行时链接程序的配置文件。通过在以下行中,可以在/etc/ld.so.conf文件中发生这种情况:
/ usr /本地/ lib
在该文件中的某个位置,或者通过在/etc/ld.so.conf.d/目录中创建一个包含新路径的新* .conf文件。例如:
/etc/ld.so.conf.d/99local.conf
只是:
/ usr /本地/ lib
在里面。这是推荐的方法,因为它使您可以将自定义库路径与系统设置的路径分开。(此处有“ 99”前缀,以确保文件最后加载是与那里的其他文件相比,这样它就不会抢占可能包含相同库的系统路径。)
在/ etc中修改/创建文件后,需要运行:
ldconfig
作为使更改生效的根源。(此命令更新/etc/ld.so.cache文件,该文件是运行时链接程序使用的实际文件。)
二进制文件还有另一种在运行时查找所需库的方法。实际上,您可以将库路径硬编码到可执行文件本身中。这可以通过设置一个所谓的“ rpath”来实现。这是一个链接器选项,必须从gcc(或g ++)传递到链接器,因此-Wl
必须使用该选项。链接器选项为-rpath=PATH
。因此,您需要将其添加到链接标志中:
-Wl,-rpath = / usr / local / lib
不过,我不建议您这样做。当将库与可执行文件(可能与安装程序一起)一起运送时,rpath很有用,然后使用相对rpath(使用rpath $ORIGIN
功能)或绝对rpath(例如,当您在/ opt中安装时)来查找那些在运行时捆绑的库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句