链接Linux版SaxonC-HE库时出现Undefined reference错误求助
确认库文件的实际格式与链接方式
下载的libsaxon-hec-12.4.1可能是共享库(.so)或静态库(.a),Linux下共享库通常带版本后缀,先执行ls /usr/local/lib | grep saxon确认文件完整后缀。若为共享库,qmake中LIBS += -lsaxon-hec-12.4.1的写法是正确的,但如果库没有软链接到无版本号的libsaxon-hec.so,可尝试指定完整路径:LIBS += /usr/local/lib/libsaxon-hec-12.4.1.so检查头文件路径配置
必须将SaxonProcessor.h所在目录添加到qmake的INCLUDEPATH,例如:INCLUDEPATH += /path/to/saxonc/include代码中头文件引用要规范,使用
#include "SaxonProcessor.h"或#include <SaxonProcessor.h>,避免路径错误导致类声明不匹配。验证架构与ABI兼容性
用file /usr/local/lib/libsaxon-hec-12.4.1查看库的架构(如x86_64/arm64),再用g++ -v确认编译器目标架构,确保两者一致。同时尽量保持项目编译器版本与编译SaxonC库的GCC版本接近,避免C++ ABI不兼容问题。无需自行编译SaxonC库
官方下载的Linux版SaxonC-HE已提供预编译可链接库,无Makefile是正常情况。若怀疑qmake配置问题,可直接用g++命令测试编译,排除qmake的配置问题:g++ your_code.cpp -o your_program -I/path/to/saxonc/include -L/usr/local/lib -lsaxon-hec-12.4.1修正代码拼写错误
你提供的伪代码中存在类名拼写错误:SaxonProcess *processor = new SaxonProcessor(false);应为SaxonProcessor *processor = new SaxonProcessor(false);(缺少末尾的or),这个错误会直接导致编译器无法识别类,进而引发链接错误。
内容的提问来源于stack exchange,提问作者Fei Su

