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主入口文件

你可能感兴趣的:(c++,postgresql)