在 AIX 7.1 上从源代码编译 Ruby
Posted
技术标签:
【中文标题】在 AIX 7.1 上从源代码编译 Ruby【英文标题】:Compile Ruby from source on AIX 7.1 【发布时间】:2019-05-12 00:45:29 【问题描述】:我正在尝试在 AIX 7.1 上使用 gcc 编译器从源代码编译 Ruby 2.4.5。配置工作正常,但 make 失败并给出错误 C 不是可识别的标志。有人遇到同样的问题并设法在 AIX 7.1 上编译 ruby 吗?
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
【问题讨论】:
您应该始终包含您收到的准确错误消息以及重现它所需的准确步骤。请阅读How to create a Minimal, Complete, Verifiable example,然后返回此处更新您的问题以反映该文章中的指南。 更新了确切的错误消息以及重现错误所需的确切步骤。 【参考方案1】:问题是您使用的是 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,需要按照 one of several 教程在 AIX 上安装它。
如果它返回 /opt/freeware/bin/make
,那么您确实安装了 GNU make,但它没有反映在 $PATH
中。在运行 make
命令之前,您可以在编译 Ruby 时将其临时添加到路径中,方法是运行 export PATH=/opt/freeware/bin:$PATH
。
更新:
我鼓励您针对当前的构建问题打开一个单独的问题,因为最初的问题是关于 make
的 -C
标志在 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'
如果这不起作用,那么您可能必须通过查找libtool
的特定调用来编辑Makefile
,并将--tag=CC
逐一附加到它们,直到您能够超越这些错误。
两种解决方案都假设正在编译的唯一代码是 C。据我所知,MRI 中需要编译的所有内容都是用 C 编写的,但如果任何东西都是用 C++ 编写的,那么 libtool
调用将需要 @987654348 @。你可以阅读更多关于标签here的信息。
【讨论】:
感谢您的更新。我在使用 GNU make 时遇到不同的错误。用错误更新了帖子。 非常感谢。我现在可以编译 ruby。我在安装 fluentd gems 时遇到了另一个问题,我将为此创建另一个问题。以上是关于在 AIX 7.1 上从源代码编译 Ruby的主要内容,如果未能解决你的问题,请参考以下文章
在 mac 上从 1.1 降级到 OPENSSL 版本 1.0