0

Linux ビルド ホストで mingw32 を使用して Xalan for Windows をクロスコンパイルしようとしています。私はこれを 1 年ほど前に Debian Lenny で問題なく実行しました (Makefile の微調整と MsgCreator のネイティブ コピーのみ)。

失敗しているコマンドは

i586-mingw32msvc-dllwrap --export-all-symbols --driver-name  \
  i586-mingw32msvc-g++ -mthreads -Wl,--allow-multiple-definition \
  ../../../../obj/XalanMsgLib.o -o ../../../../lib/libxalanMsg1_11_0.dll

これは、私のシステム用に修正された dllwrap コマンドとドライバー名を含むストック Makefile のコマンドです (Debian Squeeze、公式リポジトリからインストールされた mingw32 パッケージ)

生成されるエラーは

../../../../obj/XalanMsgLib.o: In function `_ZN11xalanc_1_1117XalanMsgContainer10getMessageEj':
  XalanMsgLib.cpp:(.text+0x18): undefined reference to `_GLOBAL_OFFSET_TABLE_'
  ../../../../obj/XalanMsgLib.o: 
  .data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): 
  undefined reference to `__gxx_personality_v0'
  collect2: ld returned 1 exit status
  i586-mingw32msvc-dllwrap: i586-mingw32msvc-g++ exited with status 1

こことGoogleで見つけたアドバイスに従って、(私が知る限り)リンクにg ++が使用されていること、およびlibstdc ++がリンクされていることを確認しました(-lstdc ++はLDFLAGSにあり、上記のコマンド)。

他にもいくつか試してみましたが、これまでのところ何もうまくいかず、アイデアが不足しています。

このエラーの原因は何ですか?どうすれば修正できますか?

4

1 に答える 1

0

結局のところ、libstdc++ へのリンクについて私が見つけたアドバイスは確かに正しく、関連していましたが、問題は私が見ていない場所で発生していました。

dllwrap コマンドには -lstdc++ が渡されたので問題ありませんでしたが、オブジェクト自体 (XalanMsgLib.o) のコンパイルはそうではありませんでした。これにより、未解決のシンボルが発生しました。

問題のある .o ファイルをコンパイルする Makefile に -lstdc++ を追加すると (最後のリンク ステップだけではなく)、問題が解決しました。

于 2012-07-05T18:39:47.660 に答える