我进入了交叉编译的勇敢世界。我目前正在尝试gettext 0.18.2
在 Ubuntu 12.04 上使用 Mingw-w64 进行编译。下面是配置命令的样子:
GNULIB_TOOL=../gnulib/gnulib-tool \
CXX="i686-w64-mingw32-g++" \
am_cv_func_iconv_works=yes \
./configure --host=i686-w64-mingw32 \
--prefix=/usr/i686-w64-mingw32
在配置脚本的(相当长的)调用中需要注意一些事项:
gettext
requiresgnulib-tool
,它存储在gnulib
源代码树上一层的目录中。由于某些奇怪的原因,配置脚本找不到 Mingw-w64 的 C++ 编译器,所以我明确提供了它。
configure 脚本
iconv
通过实际编译一个简单的示例并尝试运行它来确定是否已安装并正常工作。这显然不起作用,因为目标可执行文件不会在 Ubuntu 上运行。所以我手动通知配置脚本 iconv 已安装并且可以工作。
配置运行后,我执行make
,运行了很长时间并在链接阶段失败:
Creating library file: .libs/libgettextpo.dll.a.libs/write-po.o: In function `wrap':
gettext-tools/libgettextpo/../src/write-po.c:963: undefined reference to `_rpl_memchr'
./.libs/libgnu.a(strstr.o): In function `two_way_long_needle':
gettext-tools/libgettextpo/str-two-way.h:339: undefined reference to `_rpl_memchr'
gettext-tools/libgettextpo/str-two-way.h:391: undefined reference to `_rpl_memchr'
./.libs/libgnu.a(strstr.o): In function `two_way_short_needle':
gettext-tools/libgettextpo/str-two-way.h:234: undefined reference to `_rpl_memchr'
gettext-tools/libgettextpo/str-two-way.h:268: undefined reference to `_rpl_memchr'
./.libs/libgnu.a(vasnprintf.o): In function `max_room_needed':
gettext-tools/libgettextpo/vasnprintf.c:1699: undefined reference to `_rpl_strnlen'
collect2: ld returned 1 exit status
什么可能导致这些错误?
编辑:我通过将以下环境变量添加到configure
:
gl_cv_func_memchr_works=yes
现在我得到:
.libs/libgettextpo.dll.a./.libs/libgnu.a(vasnprintf.o):
vasnprintf.c:(.text+0x1260): undefined reference to `_rpl_strnlen'