1

我进入了交叉编译的勇敢世界。我目前正在尝试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

在配置脚本的(相当长的)调用中需要注意一些事项:

  • gettextrequires gnulib-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'
4

1 回答 1

1

终于通过将以下选项附加到配置脚本来编译愚蠢的东西:

gl_cv_func_memchr_works=yes
ac_cv_func_strnlen_working=yes

(虽然它目前只在 Win32 上编译。)

于 2012-08-14T08:49:21.420 回答