我试图编译一个依赖于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
...
我还提取从库中的目标文件,并用“纳米”,以确保我打电话的功能确实存在:
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 ++不同,我认为错误可能在链接器顺序中(类似于this question中描述的问题)。但是,即使更改链接器顺序后,我仍然收到相同的编译器错误。我曾经尝试都
g++ -o test.exe test.cpp -Llib -lxerces-c
和
g++ -o test.exe test.cpp lib/libxerces-c.a
任何想法?
这可能是不同编译器使用的不同名称修改架构的问题。你能否在你的目标文件和库上提供nm结果而没有--demangle选项? – 2012-07-12 22:07:22
你使用的库的正确分布? xerces-c_2_8_0-x86-linux-gcc_3_4.tar.gz?还是你自己在gcc上建立图书馆? – carlsborg 2012-07-15 09:47:27