我正在尝试编译一个依赖于Xerces XML Parser的项目。该项目可以毫无困难地为 Windows 编译,但我在 Cygwin 中使用 g++ 编译它时遇到了一些麻烦。
为了使用 Xerces,我正在尝试针对静态库编译我的代码libxerces-c.a
。但是当我这样做时,我会得到如下所示的错误:
/tmp/cc2QGvMh.o:test.cpp:(.text+0x3a): undefined reference to `xercesc_2_8::DOMImplementationRegistry::getDOMImplementation(unsigned short const*)'
我已经使用 检查了静态库ar
,并确认它包含DOMImplementationRegistry.o
定义我正在调用的函数的文件。
ar -t libxerces-c.a
...
DOMImplementationImpl.o
DOMImplementationRegistry.o
DOMLocatorImpl.o
...
我还从库中提取了目标文件,并使用“nm”来确保我调用的函数确实存在:
ar -x libxerces-c.a
nm --demangle DOMImplementationRegistry.o
...
00000080 T xercesc_2_8::getDOMImplSrcVectorMutex()
00000300 T xercesc_2_8::DOMImplementationRegistry::getDOMImplementation(unsigned short const*)
000002a0 T xercesc_2_8::DOMImplementationRegistry::addSource(xercesc_2_8::DOMImplementationSource*)
...
由于我可以为 Windows 编译所有内容,但不能使用 g++,因此我认为错误可能出在链接器顺序中(类似于此问题中描述的问题)。但是,即使更改了链接器顺序,我仍然会遇到相同的编译器错误。我都试过了
g++ -o test.exe test.cpp -Llib -lxerces-c
和
g++ -o test.exe test.cpp lib/libxerces-c.a
有任何想法吗?