无root权限集群运行dawg遇libboost_program_options.so.1.65.1加载错误求助
解决Boost库加载失败的问题
我来帮你一步步排查和解决这个程序运行时找不到手动安装Boost库的问题:
1. 先修正LD_LIBRARY_PATH的配置问题
你在.bashrc里写的路径多了一层lib,正常Boost安装后库文件是放在boost_1_65_1/lib下,而非lib/lib。
- 打开
.bashrc修改配置:export LD_LIBRARY_PATH="/home/masih/Baterial_simulator/boost_1_65_1/lib:$LD_LIBRARY_PATH" - 让配置立即生效:
source ~/.bashrc - 验证路径是否正确加载:
确认输出里包含echo $LD_LIBRARY_PATH/home/masih/Baterial_simulator/boost_1_65_1/lib即可。
如果想临时测试,也可以直接在运行程序前执行:
export LD_LIBRARY_PATH="/home/masih/Baterial_simulator/boost_1_65_1/lib:$LD_LIBRARY_PATH" ./dawg
2. 修正CMakeLists.txt中的Boost配置错误
你的CMake配置路径设置有误,BOOST_ROOT应该指向Boost的根目录,而非lib目录:
# 修正Boost根目录路径 SET(BOOST_ROOT "/home/masih/Baterial_simulator/boost_1_65_1") # 头文件目录是根目录下的include,不是lib/include SET(BOOST_INCLUDEDIR "${BOOST_ROOT}/include") # 库目录是根目录下的lib SET(BOOST_LIBRARYDIR "${BOOST_ROOT}/lib") # 明确查找需要的组件(program_options) find_package(Boost REQUIRED COMPONENTS program_options) # 链接时使用找到的Boost库 target_link_libraries(dawg PRIVATE ${Boost_LIBRARIES}) # 关键:设置运行时库搜索路径(rpath),让程序运行时自动识别本地Boost库 set(CMAKE_INSTALL_RPATH "${BOOST_ROOT}/lib") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # 或者直接给目标添加rpath选项 target_link_options(dawg PRIVATE "-Wl,-rpath,${BOOST_ROOT}/lib")
修改后重新编译程序:
cd my_build cmake .. make clean && make
3. 验证库文件的存在和权限
确认你的库文件确实存在且拥有可读权限:
ls -l /home/masih/Baterial_simulator/boost_1_65_1/lib/libboost_program_options.so.1.65.1
如果输出显示文件存在,且你有读权限,这一步就没问题。
4. 临时应急方案:使用LD_PRELOAD指定库
如果上面的方法暂时没生效,可以直接在运行程序时强制加载指定库:
LD_PRELOAD=/home/masih/Baterial_simulator/boost_1_65_1/lib/libboost_program_options.so.1.65.1 /home/masih/Baterial_simulator/dawg_new/my_build/bin/dawg
额外排查点
- 检查集群是否有其他环境变量覆盖了你的
LD_LIBRARY_PATH,比如系统默认的Boost路径优先级更高,可以用env | grep LD_LIBRARY_PATH查看所有相关变量。 - 确认编译程序时,CMake确实找到了你手动安装的Boost而非系统自带版本:编译时看CMake输出,应该会显示
Found Boost: /home/masih/Baterial_simulator/boost_1_65_1之类的信息。
内容的提问来源于stack exchange,提问作者Masih
相关产品推荐
相关产品推荐

