CLion运行构建目标时忽略LD_LIBRARY_PATH的解决咨询
问题描述
我在.bashrc里已经把LD_LIBRARY_PATH设到了指定目录,但CLion运行项目构建出的目标文件时,这个路径被忽略,导致找不到共享库:
/home/joeuser/src/myproj/cmake-build-debug/bin/myapp /home/joeuser/src/myproj/cmake-build-debug/bin/myapp: error while loading shared libraries: libfoo.so.11.0: cannot open shared object file: No such file or directory
在shell会话里直接运行这个可执行文件时,能通过LD_LIBRARY_PATH正常找到libfoo.so.11.0并运行。
备注:
- 系统是Devuan GNU/Linux Daedalus
- 在CMake的Terminal标签页里调用程序能正常运行
- 已确认
/etc/ld.so.conf.d/cuda文件包含对应的库路径
解决方法
1. 让CLion继承shell的环境变量
CLion默认不会读取.bashrc里的环境变量,尤其是通过图形界面启动的时候。可以这么处理:
- 打开终端,先执行
source ~/.bashrc确保配置生效,然后在终端里运行clion.sh启动CLion。 - 如果用桌面快捷方式启动,把快捷方式的执行命令改成
bash -i -c "clion.sh",这样会以交互式shell启动CLion,自动读取.bashrc的配置。
2. 在CLion里直接配置环境变量
打开CLion的设置:
- 进入
Run/Debug Configurations,找到你的项目运行配置。 - 在
Environment variables区域点击编辑按钮,添加LD_LIBRARY_PATH变量,值填你需要的路径(比如/path/to/your/lib:$LD_LIBRARY_PATH)。
3. 通过CMake配置运行时库路径
在项目的CMakeLists.txt里加以下代码,让CMake生成可执行文件时指定运行时库的搜索路径:
set_target_properties(myapp PROPERTIES BUILD_RPATH_USE_ORIGIN TRUE INSTALL_RPATH_USE_LINK_PATH TRUE BUILD_RPATH "/path/to/your/lib" )
也可以用全局设置:
set(CMAKE_INSTALL_RPATH "/path/to/your/lib") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
4. 更新系统动态库缓存
虽然你已经确认/etc/ld.so.conf.d/cuda包含路径,但可能没更新系统缓存。运行下面的命令:
sudo ldconfig
系统会重新加载动态库配置,之后CLion运行程序可能就能找到库了。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

