Компилировать Ruby из исходного кода в AIX 7.1 - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь скомпилировать Ruby 2.4.5 из исходного кода, используя компилятор gcc в AIX 7.1.Конфигурация работает нормально, но make терпит неудачу, выдавая ошибку C - не распознанный флаг.Кто-нибудь сталкивался с такой же проблемой и сумел скомпилировать ruby ​​в AIX 7.1?

Steps followed:

1) ./configure --disable-install-doc CC="gcc" CFLAGS="-maix64 -mminimal-toc" CXX="g++" CXXFLAGS="-maix64 -mminimal-toc" NM="nm -X64" AR="ar -X64" LDFLAGS="-maix64" EXTLDFLAGS=" -- works perfectly fine

2) make - fails with the below error

    make: Not a recognized flag: C
    usage: make [-einqrst] [-k|-S] [-d[A|adg[1|2]mstv]] [-D variable] [-f makefile] [-j [jobs]] [variable=value ...] [target ...]
    make: 1254-004 The error code from the last command is 2.
    Stop.
    make: 1254-004 The error code from the last command is 2.
    Stop.
    make: 1254-004 The error code from the last command is 2.

Обновление:

Переключение на GNU make дает следующую ошибку:

Making all in man
make[5]: Entering directory '/test/ruby-2.4.5/tst/ext/fiddle/libffi-3.2.1/man'
make[5]: Nothing to be done for 'all'.
make[5]: Leaving directory '/test/ruby-2.4.5/tst/ext/fiddle/libffi-3.2.1/man'
make[5]: Entering directory '/test/ruby-2.4.5/tst/ext/fiddle/libffi-3.2.1'
  CC       src/prep_cif.lo
  CC       src/types.lo
  CC       src/raw_api.lo
  CC       src/java_raw_api.lo
  CC       src/closures.lo
  CC       src/powerpc/ffi_darwin.lo
../../../../ext/fiddle/libffi-3.2.1/src/powerpc/ffi_darwin.c: In function 'ffi_p                                                                                                                                                             rep_args':
../../../../ext/fiddle/libffi-3.2.1/src/powerpc/ffi_darwin.c:112:17: warning: un                                                                                                                                                             used variable 'abi' [-Wunused-variable]
   const ffi_abi abi = ecif->cif->abi;
                 ^
  CPPAS    src/powerpc/aix.lo
libtool: compile: unable to infer tagged configuration
libtool: compile: specify a tag with `--tag'
Makefile:1335: recipe for target 'src/powerpc/aix.lo' failed
make[5]: *** [src/powerpc/aix.lo] Error 1
make[5]: Leaving directory '/test/ruby-2.4.5/tst/ext/fiddle/libffi-3.2.1'
Makefile:1596: recipe for target 'all-recursive' failed
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory '/test/ruby-2.4.5/tst/ext/fiddle/libffi-3.2.1'
Makefile:730: recipe for target 'all' failed
make[3]: *** [all] Error 2
make[3]: Leaving directory '/test/ruby-2.4.5/tst/ext/fiddle/libffi-3.2.1'
Makefile:370: recipe for target 'libffi-3.2.1/.libs/libffi_convenience.a' failed
make[2]: *** [libffi-3.2.1/.libs/libffi_convenience.a] Error 2
make[2]: Leaving directory '/test/ruby-2.4.5/tst/ext/fiddle'
exts.mk:212: recipe for target 'ext/fiddle/all' failed
make[1]: *** [ext/fiddle/all] Error 2
make[1]: Leaving directory '/test/ruby-2.4.5/tst'
uncommon.mk:220: recipe for target 'build-ext' failed
make: *** [build-ext] Error 2

1 Ответ

0 голосов
/ 11 декабря 2018

Проблема в том, что вы используете встроенную копию AIX make, и она не поддерживает параметр командной строки -C.Эта опция доступна в GNU make .

Если вы запускаете make -v и не видите вывод, подобный следующему, то вы не используете GNU make:

GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.

Запустите команду which make, и она вернет либо /usr/bin/make, либо /opt/freeware/bin/make (или аналогичный путь вне /usr/bin):

  • Если она вернет /usr/bin/make, тогдау вас не установлена ​​GNU make в вашей системе, и вам нужно будет один из нескольких руководств, чтобы установить его в AIX.

  • Если он возвращает /opt/freeware/bin/make, значит, у вас установлен GNU make, но это не отражено в $PATH.Вы можете временно добавить его в свой путь во время компиляции Ruby, выполнив команду export PATH=/opt/freeware/bin:$PATH перед выполнением команды make.

Обновление:

Я бы посоветовал вам открыть отдельный вопрос для вашей текущей проблемы сборки, поскольку первоначальный вопрос был о флаге -C для make, не работающем в AIX, и теперь у вас есть отдельный вопрос о запуске GNU make сСовсем другой набор проблем и возможных решений.

Тем не менее, возможно, вы сможете решить свою проблему, начав заново и выполнив ./configure LIBTOOL='/usr/bin/libtool --tag=CC' (или любой другой путь к libtool).Это основано на следующих сообщениях:

libtool: compile: unable to infer tagged configuration
libtool: compile: specify a tag with `--tag'

Если это не сработает, вам, вероятно, придется отредактировать Makefile, отыскивая конкретные вызовы libtool и добавляя --tag=CCодин за другим, пока вы не сможете выйти за пределы этих ошибок.

Оба решения предполагают, что единственным компилируемым кодом является C. Насколько мне известно, все в MRI, которое должно быть скомпилировано, написано наC, но если что-то написано на C ++, то для вызовов libtool потребуется --tag=CXX.Вы можете прочитать больше о тегах здесь .

...