You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下libpqxx(PostgreSQL)链接错误排查求助

问题描述

通过vcpkg将libpqxx(pqxx)添加到CMake项目后,构建时出现链接错误。

现有CMake代码

find_package(libpqxx CONFIG REQUIRED)

target_link_libraries(PqDataBase PRIVATE libpqxx::pqxx)

头文件引入

#include <pqxx/pqxx>

错误信息

D:\PqDataBase>cmake --build .\build
[2/2] Linking CXX executable PqDataBase.exe
FAILED: PqDataBase.exe
C:\windows\system32\cmd.exe /C "cd . && C:\msys64\ucrt64\bin\c++.exe   CMakeFiles/PqDataBase.dir/PqDataBase.cpp.obj -o PqDataBase.exe -Wl,--out-implib,libPqDataBase.dll.a -Wl,--major-image-version,0,--minor-image-version,0  C:/vcpkg/installed/x64-windows/debug/lib/pqxx.lib  -lwsock32  -lws2_32  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && C:\windows\system32\cmd.exe /C "cd /D D:\PqDataBase\build && C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file C:/vcpkg/scripts/buildsystems/msbuild/applocal.ps1 -targetBinary D:/PqDataBase/build/PqDataBase.exe -installedDir C:/vcpkg/installed/x64-windows/bin -OutVariable out"
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/PqDataBase.dir/PqDataBase.cpp.obj:PqDataBase.cpp:(.text+0x1bd): undefined reference to `__imp__ZN4pqxx14argument_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/PqDataBase.dir/PqDataBase.cpp.obj:PqDataBase.cpp:(.text+0x311): undefined reference to `__imp__ZN4pqxx8internal18demangle_type_nameB5cxx11EPKc'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/PqDataBase.dir/PqDataBase.cpp.obj:PqDataBase.cpp:(.text+0x345): undefined reference to `__imp__ZN4pqxx8internal18demangle_type_nameB5cxx11EPKc'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/PqDataBase.dir/PqDataBase.cpp.obj:PqDataBase.cpp:(.text+0x379): undefined reference to `__imp__ZN4pqxx8internal18demangle_type_nameB5cxx11EPKc'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/PqDataBase.dir/PqDataBase.cpp.obj:PqDataBase.cpp:(.text+0x3ad): undefined reference to `__imp__ZN4pqxx8internal18demangle_type_nameB5cxx11EPKc'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles/PqDataBase.dir/PqDataBase.cpp.obj:PqDataBase.cpp:(.text$_ZN4pqxx14argument_errorD1Ev[_ZN4pqxx14argument_errorD1Ev]+0xf): undefined reference to `__imp__ZTVN4pqxx14argument_errorE'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
解决方案

1. 安装适配MinGW的libpqxx版本

错误显示你用MinGW编译器链接了MSVC版本的libpqxx库(x64-windows),两者不兼容。执行以下命令重新安装MinGW适配的动态库版本:

vcpkg install libpqxx:x64-mingw-dynamic

2. 指定vcpkg工具链文件配置CMake

配置CMake时必须明确指定vcpkg的工具链文件,确保找到正确的库:

cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-mingw-dynamic

3. 完善CMake链接配置

若仍有问题,尝试显式链接PostgreSQL基础库:

find_package(libpqxx CONFIG REQUIRED)
find_package(PostgreSQL REQUIRED)

target_link_libraries(PqDataBase PRIVATE libpqxx::pqxx PostgreSQL::PostgreSQL)

4. 确保动态库可被找到

构建完成后,将C:/vcpkg/installed/x64-mingw-dynamic/bin下的pqxx.dll复制到可执行文件所在目录,或把该路径添加到系统环境变量PATH中。

内容的提问来源于stack exchange,提问作者muhammed_h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:14:51