0

我正在尝试在 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 中,我还在上面的命令)。

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

是什么导致了这个错误,我该如何解决?

4

1 回答 1

0

事实证明,我发现的关于链接到 libstdc++ 的建议确实是正确且相关的,但问题发生在我没有注意的地方。

dllwrap 命令通过了 -lstdc++,所以这很好,但对象本身 (XalanMsgLib.o) 的编译不是。这导致了未解析的符号。

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

于 2012-07-05T18:39:47.660 回答