C++项目工程在Linux环境开发、部署和运行问题
背景当我们自己开发的项目程序需要在linux上进行部署、调试时,项目代码完整拷贝过去之后,直接运行我们自己的可执行程序,往往提示找不到所相关的.so库,会报错。这是因为,系统只会去默认搜寻目录(/lib和/usr/lib)下,以及动态库配置文件(/etc/ld.so.conf和/etc/ld.so.conf.d/*.conf)里所列的目录下, 搜索可共享的动态库(格式如lib*.so*),进而创建
背景
当我们自己开发的项目程序需要在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
更多推荐
所有评论(0)