如何用Meson编译PostgreSQL 17仅生成静态库libpq.lib?
如何在Windows上通过Meson编译纯静态的libpq.lib(PostgreSQL 17.x)
尽管PostgreSQL上游代码强制同时生成静态库与共享库,且开发方暂不支持仅编译静态库的官方选项,你仍可以通过以下两种方式获取不依赖DLL的纯静态libpq库:
方法1:直接使用编译后生成的静态库
PostgreSQL在Windows下用Meson编译时,当library: 'both'生效,会同时生成两类库文件:
libpq.lib:对应libpq.dll的导入库,依赖动态库运行libpq_static.lib:纯静态库,不依赖任何DLL
你可以直接在构建目录的src/interfaces/libpq路径下找到libpq_static.lib,这个就是你需要的纯静态库,无需额外修改配置。
方法2:修改libpq的Meson配置文件强制仅生成静态库
如果需要直接生成名为libpq.lib的纯静态库,可以修改PostgreSQL源码中的src/interfaces/libpq/meson.build文件:
找到定义pq库的代码段(对应你提到的第65行附近),将其中的library: 'both'修改为library: 'static',保存后重新执行编译流程:
meson setup --default-library=static build ninja -C build
编译完成后,构建目录下只会生成纯静态的libpq.lib,不会再出现libpq.dll和对应的导入库。
静态链接注意事项
使用静态libpq时,需要确保链接所有依赖的静态库(如libpgport.lib、libpgcommon.lib)以及Windows系统库(如ws2_32.lib、secur32.lib),具体依赖可参考PostgreSQL官方文档中的静态链接说明。
内容的提问来源于stack exchange,提问作者uilianries
相关产品推荐
相关产品推荐

