2

我将在基于 MobaXterm v11.1 cygwin 的发行版上编译 Poly/ML Standard ML 编译器。一经制作,我得到

/bin/sh ./libtool  --tag=CC   --mode=link gcc  -O3 -fomit-frame-pointer -fstrict-aliasing -ffast-math -march=core2  -Wall -fexceptions   -o libffi_convenience.la  src/prep_cif.lo src/types.lo src/raw_api.lo src/java_raw_api.lo src/closures.lo      src/x86/ffi.lo src/x86/win32.lo
libtool: link: ar cru .libs/libffi_convenience.a src/.libs/prep_cif.o src/.libs/types.o src/.libs/raw_api.o src/.libs/java_raw_api.o src/.libs/closures.o src/x86/.libs/ffi.o src/x86/.libs/win32.o
ar: unknown option -- u
BusyBox v1.22.1 (2015-11-10 11:07:12    ) multi-call binary.

这里我有 binutils/ar 版本 2.29.1。

在带有 binutils/ar 版本 2.22.52 的 Fedora 机器上,编译通过。

我将 binutils 2.22.52 下载到我的 MobaXterm 并尝试编译它,但我收到与上面相同的错误消息:

ar cru libintl.a bindtextdom.o dcgettext.o dgettext.o gettext.o finddomain.o loadmsgcat.o localealias.o textdomain.o l10nflist.o explodename.o dcigettext.o dcngettext.o dngettext.o ngettext.o plural.o plural-exp.o localcharset.o relocatable.o localename.o log.o osdep.o intl-compat.o
ar: unknown option -- u

我看到了两个可能的原因:

  • u2.22.52 和 2.29.1 版本之间不推荐使用 ar 选项
  • MobaXterm 使用 Busybox,其中包含有限版本的 ar

什么是真正的解释,如何安装理解 u 选项的 ar?

4

1 回答 1

2

在我编辑的 polyml 源代码分发的目录libffi中,然后在该目录中通过,然后在主要的 polyml 目录中通过。configureAR_FLAGS=crmakemake

幸运的是,该u选项对生成的文件没有实际影响,仅对编译时间有影响:

   u   Normally, ar r... inserts all files listed into the archive.  If you would like to insert only
       those of the files you list that are newer than existing members of the same names, use this
       modifier.  The u modifier is allowed only for the operation r (replace).  In particular, the
       combination qu is not allowed, since checking the timestamps would lose any speed advantage
       from the operation q.
于 2019-03-11T10:32:30.843 回答