我正在尝试使用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中,我也手动指定)它在上面的命令上。)
我尝试过其他一些事情,但到目前为止还没有任何效果,而且我的想法已经不多了。
导致此错误的原因是什么,我该如何解决?
答案 0 :(得分:0)
事实证明,我发现关于链接到libstdc ++的建议确实是正确和相关的,但问题出现在我不看的地方。
dllwrap命令传递了-lstdc ++,所以很好,但是对象本身的编译(XalanMsgLib.o)却没有。这导致了未解决的符号。
将-lstdc ++添加到编译有问题的.o文件的Makefile中(而不仅仅是最后的链接步骤)解决了这个问题。