C++使用libpqxx连接PostgreSQL 14出现大量DLL错误如何解决?
问题产生原因
- 你当前仅配置了libpqxx的导入库
pqxx.lib的链接规则,缺失PostgreSQL 14官方自带的运行时依赖DLL(包括libpq.dll、libcrypto-1_1-x64.dll、libssl-1_1-x64.dll等),从第三方DLL下载站获取的文件版本、架构和你使用的PostgreSQL 14、libpqxx编译参数不匹配,因此解决一个错误后会持续触发新的依赖错误。 - 你编译得到的libpqxx为动态链接版本,运行时必须依赖与其编译配置(相同VS版本、相同运行时规则、相同x86/x64架构)的关联库,你既没有将对应依赖DLL放入程序运行目录,也没有将PostgreSQL 14的依赖路径加入系统环境变量,运行时无法定位到所需文件。
- 你的项目编译配置与libpqxx的编译配置不匹配,例如项目使用Debug模式但链接了Release版的
pqxx.lib,或是项目运行时库选择了/MTd而libpqxx编译时使用/MD,也会触发依赖查找异常。
解决方案
- 首先删除所有从第三方DLL网站下载的相关文件,这类文件版本混乱且存在安全风险,无法匹配你的运行环境。
- 打开你本地安装的PostgreSQL 14根目录,进入
bin文件夹,将目录下所有带lib前缀的.dll文件全部复制到你的C++项目生成的可执行文件所在目录;也可以直接将PostgreSQL 14的bin目录完整路径添加到系统环境变量PATH中,添加完成后重启IDE生效。 - 核对项目配置与libpqxx编译配置的一致性:
- 确认项目的运行架构(x86/x64)和你编译libpqxx、安装PostgreSQL的架构完全一致
- 确认项目运行时库设置(项目属性→C/C++→代码生成→运行库)和libpqxx编译时的配置匹配,Release版使用
多线程DLL(/MD),Debug版使用多线程调试DLL(/MDd) - 确认你链接的
pqxx.lib版本和项目编译模式匹配,不要在Debug模式下链接Release版的libpqxx库文件
- 核对链接器配置:确认项目属性→链接器→常规→附加库目录已经添加了libpqxx的
lib目录路径,链接器→输入→附加依赖项已经添加pqxx.lib,同时确保你使用的libpqxx是基于你当前的VS版本、PostgreSQL 14版本本地编译得到的,不要使用来源不明的预编译libpqxx版本。
内容的提问来源于stack exchange,提问作者Alejandro V
相关产品推荐
相关产品推荐

