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
何か案は?