我试图使用Mingw-w64的32位编译器(i686-w64-mingw32
工具链)来交叉编译Windows的ICU库。主机是Ubuntu 12.10 64位。
我采取的步骤如下:
从here抓取最新的源代码存档并解压缩。
制作source/
目录的两个副本 - 一个用于主机,一个用于目标。
对于主机构建:
./configure ; make
对于目标版本:
./configure --host=i686-w64-mingw32 --with-cross-build=<host_source_dir>
...其中<host_source_dir>
是上一步的目录。
当我在目标源目录中运行make
时,编译过程中没有任何错误,然后抛出此错误:
i686-w64-mingw32-g++ -O2 -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long -mthreads -o ../../bin/uconv.exe uconv.o uwmsg.o -L../../lib -licuin50 -L../../lib -licuuc50 -L../../stubdata -licudt50 -lm uconvmsg/uconvmsg.a uconv.o:uconv.cpp:(.text+0x2f): undefined reference to `_uconvmsg_dat'
可能导致此错误的原因是什么?我支持了几行,并注意到了这一点:
pkgdata: i686-w64-mingw32-gcc -O2 -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -mthreads -shared -Wl,-Bsymbolic -Wl,--enable-auto-import -Wl,--out-implib=./all.lib -o ../lib/icudt50.dll ./out/tmp/icudt50l_dat.o Cannot export icudt50_dat: symbol not found collect2: ld returned 1 exit status -- return status = 256 Error generating library file. Failed command: i686-w64-mingw32-gcc -O2 -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -mthreads -shared -Wl,-Bsymbolic -Wl,--enable-auto-import -Wl,--out-implib=./all.lib -o ../lib/icudt50.dll ./out/tmp/icudt50l_dat.o Error generating assembly code for data.
我做错了什么?
答案 0 :(得分:0)
为了调试您的符号问题,只需将-Wl,--trace-symbol=_uconvmsg_dat
标记提供给i686-w64-mingw32-g++
,如下所示:
i686-w64-mingw32-g++ -O2 -W -Wall -pedantic -Wpointer-arith -Wwrite-strings
-Wno-long-long -mthreads -o ../../bin/uconv.exe uconv.o uwmsg.o
-L../../lib -licuin50 -L../../lib -licuuc50 -L../../stubdata -licudt50
-lm uconvmsg/uconvmsg.a -Wl,--trace-symbol=_uconvmsg_dat
答案 1 :(得分:0)
事实证明问题确实与ICU源代码有关。我不确定我究竟是什么问题,但幸好其他人做了并写了三个补丁。
前两个适用于我上面的问题:
在构建x86_64架构时,使用第三个补丁而不是上面列表中的第二个补丁:
运行make install
时似乎仍然存在问题,但至少源代码树似乎现在正在构建。