运行编译后的可执行文件时出现libpqxx-6.2.so共享库加载错误
解决运行时找不到libpqxx共享库的问题
运行编译后的可执行文件./test_pq时出现如下错误:
./test_pq: error while loading shared libraries: libpqxx-6.2.so: cannot open shared object file: No such file or directory
编译和链接过程无异常,但运行时动态链接器无法找到libpqxx-6.2.so——这是因为编译时通过-L/opt/bb/lib64告诉链接器库的位置,但运行时动态链接器默认只搜索系统标准库目录,你的库所在的/opt/bb/lib64不在默认搜索列表中。
以下是几种可行的解决方法:
方法1:临时设置环境变量
运行前通过LD_LIBRARY_PATH指定库路径,让动态链接器能找到目标库:
export LD_LIBRARY_PATH=/opt/bb/lib64:$LD_LIBRARY_PATH ./test_pq
该方式仅在当前终端会话生效,重启后需要重新设置。
方法2:永久配置系统库搜索路径
系统级配置(所有用户生效)
- 在
/etc/ld.so.conf.d/目录下创建新的配置文件:
echo "/opt/bb/lib64" | sudo tee /etc/ld.so.conf.d/bb-libs.conf
- 更新动态链接器缓存:
sudo ldconfig
用户级配置(仅当前用户生效)
编辑用户主目录下的~/.bashrc或~/.bash_profile文件,添加以下内容:
export LD_LIBRARY_PATH=/opt/bb/lib64:$LD_LIBRARY_PATH
执行以下命令让配置立即生效:
source ~/.bashrc
方法3:通过CMake设置RPATH(推荐)
修改你的CMakeLists.txt,让可执行文件编译时自带库路径信息,运行时无需依赖环境变量。在add_executable之后添加:
# 获取libpqxx所在的目录 get_filename_component(pqxx_lib_dir ${pqxx} DIRECTORY) # 设置RPATH set_target_properties(test_pq PROPERTIES INSTALL_RPATH "${pqxx_lib_dir}" BUILD_WITH_INSTALL_RPATH ON )
重新执行cmake ..和make编译后,可执行文件会自动在指定路径搜索共享库。
额外注意
你的CMakeLists.txt中有一处笔误:target_compile_options的目标写为test_pqa,应修正为test_pq,避免编译选项未正确应用:
target_compile_options(test_pq PUBLIC -std=c++17 -pthread )
内容的提问来源于stack exchange,提问作者Bhavna Sehgal
相关产品推荐
相关产品推荐

