在 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

使用xlC 13.1.2在AIX 7.1上编译boost C ++库

更改构建 c 编译器

在 OS X 上从 XCode 迁移到 GCC

在 linux 上从源代码编译 LLVM

在 find 命令中查找不支持 printf 的 AIX 系统上的前 N ​​个最旧文件