使用mingw32交叉编译Xalan时出错

时间:2012-07-05 16:56:17

标签: cross-compiling xalan mingw32

我正在尝试使用Linux构建主机上的mingw32交叉编译Xalan for Windows。我大约一年前在Debian Lenny上做了这个,没有太多麻烦(只是对Makefile的一些小调整,以及MsgCreator的原生副本),但是试图在Squeeze上做这件事会变得有点困难。

失败的命令是

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

这是来自库存Makefile的命令,我的系统更正了dllwrap命令和驱动程序名称(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中,我也手动指定)它在上面的命令上。)

我尝试过其他一些事情,但到目前为止还没有任何效果,而且我的想法已经不多了。

导致此错误的原因是什么,我该如何解决?

1 个答案:

答案 0 :(得分:0)

事实证明,我发现关于链接到libstdc ++的建议确实是正确和相关的,但问题出现在我不看的地方。

dllwrap命令传递了-lstdc ++,所以很好,但是对象本身的编译(XalanMsgLib.o)却没有。这导致了未解决的符号。

将-lstdc ++添加到编译有问题的.o文件的Makefile中(而不仅仅是最后的链接步骤)解决了这个问题。