背景

当我们自己开发的项目程序需要在linux上进行部署、调试时,项目代码完整拷贝过去之后,直接运行我们自己的可执行程序,往往提示找不到所相关的.so库,会报错。这是因为,系统只会去默认搜寻目录(/lib/usr/lib)下,以及动态库配置文件(/etc/ld.so.conf/etc/ld.so.conf.d/*.conf)里所列的目录下, 搜索可共享的动态库(格式如lib*.so*),进而创建出动态装入程序*(ld.so)*所需的连接和缓存文件。而我们自己项目所依赖的库路径不在上面几个路径,因此,找不到对应的库文件,所以,需要我们手动将路径添加进去。

问题

将写好的C++项目,在linux环境上部署、联调时,经常会出现如下问题:

error while loading shared libraries: libIce.so.37: cannot open shared object file: No such file or directory

在这里插入图片描述

原因:

可执行程序执行时找不到依赖的动态库。要么是没有这个so文件,要么是文件的路径没有指对

解决方法:

ldd命令查看可执行程序依赖了哪些so库,哪些是找不到的:

ldd FMonitor

在这里插入图片描述

如图所示,显示not found的库都是没有找到的,而在项目的bin目录中是有这些库的,所以需要将自己项目中的这些.so库文件的路径添加到系统默认的库搜索目录。步骤如下:

# 在/etc/ld.so.conf.d目录下创建LiMonitor.conf文件,将该软件依赖的库路径添加进去
echo /home/nsy/Project/LiMonitor/bin/ > /etc/ld.so.conf.d/LiMonitor.conf
# 执行生效
ldconfig

使用ldd命令再次查看程序依赖库寻找情况,如下:

在这里插入图片描述

表明,所有依赖库,已经全部找到,至此,可以执行此应用程序,如下:

在这里插入图片描述

下次,无论哪个用户都可以运行该软件。

补充

补充1
在进行调试时,也可以临时将依赖库路径添加到系统环境,仅在当前终端有效。执行以下命令

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/home/nsy/Project/LiMonitor/bin/

补充2:
从windows 上传文件到linux

# 使用ssh上传文件  -r表传文件
scp -r D:/工作积累/Module/LiMonitor/LiMonitor nsy@192.168.xxx.x:/home/nsy/Project

参考:https://www.cnblogs.com/zakzhu/p/12427512.html

Logo

更多推荐