Library not loaded: libpq.5.dylib C++连接PostgreSQL折腾踩坑

首先列一下项目CMakeLists

cmake_minimum_required(VERSION 3.14)
project(CraEngine)

set(CMAKE_CXX_STANDARD 11)

#打开UIC、Moc、Rcc开关
set(CMAKE_AUTOMOC on)
set(CMAKE_AUTOUIC on)
set(CMAKE_AUTORCC on)
set(CMAKE_MACOSX_RPATH 0)
#非常重要!定义PG的路径
set(PostgreSQL_ROOT "/Library/PostgreSQL/12")
#随后找到它
find_package(PostgreSQL REQUIRED pq)
#根据上一步中配置的CMake Options参数 寻找Qt相关模块,注意大小写
find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets)

include_directories(/Library/PostgreSQL/12/include)
include_directories(src/*)

aux_source_directory(. DIR_SRCS)
add_executable(CraEngine
        ${DIR_SRCS})

#链接PG库、Qt相关模块库,必须跟上面find_packge中添加的模块名称一致
target_link_libraries(${PROJECT_NAME}
        Qt5::Core Qt5::Gui Qt5::Widgets ${PostgreSQL_LIBRARIES})
        

使用CMake正常编译没有问题,但是运行时出错

dlopen(/Users/linus/Code/CPP/CraEngine/cmake-build-debug/CraEngine, 9): Library not loaded: libpq.5.dylib

根据提示当然是库没有加载,解决方法也很easy
首先cd到

cmake-build-debug

文件夹中
使用

 otool -L CraEngine

查看链接库情况,这时候能发现libpq.5.dylib与其他库不同,前面没有@rpath注记
@rpath具体的介绍网上很多了,就不细讲了,但是我们的问题就在这儿
so,next
使用这一句解决问题

sudo install_name_tool -change libpq.5.dylib /Library/PostgreSQL/12/lib/libpq.5.dylib ./CraEngine

即sudo install_name_tool -change为创造@rpath软连接
将原来的无路径引用libpq.5.dylib改为正确位置/Library/PostgreSQL/12/lib/libpq.5.dylib
作用于CraEngine主入口文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值