Компиляция Poly / ML на MobaXterm: опция ar u - PullRequest
1 голос
/ 11 марта 2019

Я собираюсь скомпилировать стандартный ML-компилятор Poly / ML в дистрибутиве MobaXterm v11.1 на основе cygwin.После make я получаю

/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.

На коробке Fedora с binutils / ar версии 2.22.52 компиляция проходит.

Я загрузил 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

Я вижу две возможные причины этого:

  • опция u ar становится устаревшей между версиями 2.22.52 и 2.29.1
  • MobaXterm использует Busybox, который включает в себя ограниченную версию ar

Что такоереальное объяснение и как я могу установить AR, который понимает вариант U?

1 Ответ

2 голосов
/ 11 марта 2019

В каталоге libffi исходного кода polyml я отредактировал configure с помощью AR_FLAGS=cr, затем make в этом каталоге и затем make в основном каталоге polyml.

К счастью, опция 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.
...