Java 8 + EnterpriseDB 15.2编译PLJAVA 1.5.6链接失败求助
解决PLJAVA 1.5.6编译时LNK2001/LNK2019未解析符号问题
这些未解析的_errstart和_errfinish是PostgreSQL核心的错误处理函数,出现这类链接错误通常是因为编译构建时未正确关联PostgreSQL的开发库,或者代码修改破坏了符号引用。以下是具体解决步骤:
确认PostgreSQL开发环境配置
- 检查系统环境变量
PG_HOME是否指向完整的PostgreSQL安装目录(必须包含include头文件目录和lib库目录,建议使用PLJAVA 1.5.6兼容的PostgreSQL版本,如9.6~12)。 - 在Microsoft Visual Studio命令提示符中,手动将PostgreSQL的lib目录加入链接器路径:
set LIB=%LIB%;%PG_HOME%\lib set INCLUDE=%INCLUDE%;%PG_HOME%\include
- 检查系统环境变量
检查代码修改部分
- 确认修改后的代码中没有误删
#include "elog.h"头文件引用,errstart和errfinish的定义就在该文件中。 - 检查编译宏定义是否与PostgreSQL一致,Windows平台下PostgreSQL会使用特定的预定义宏(如
WIN32)确保符号名的正确性,避免自定义宏导致符号名变异。
- 确认修改后的代码中没有误删
调整Maven构建配置
打开PLJAVA项目的pom.xml,找到负责本地编译的插件(如maven-native-plugin),在其链接参数中明确指定PostgreSQL的核心库:<linkerOptions> <linkerOption>%PG_HOME%\lib\postgres.lib</linkerOption> </linkerOptions>匹配VS命令提示符架构
使用与PostgreSQL安装包相同架构的VS命令提示符(例如PostgreSQL是64位版本,就启动x64 Native Tools Command Prompt for VS),避免因架构不匹配导致链接失败。彻底清理后重新构建
先执行完整清理命令,再重新构建:mvn clean mvn install
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

