编译Ruby 2.4.2的问题

时间:2017-10-25 19:19:32

标签: ruby gcc rubygems autotools

我正在尝试构建一个易于移植的最小Ruby,而不依赖于外部项目,只是为了我自己的学习过程。

我正在使用otool -L ruby来确定Ruby二进制文件动态链接的库,因为我试图将其最小化。

昨天当我构建Ruby时,它只是动态地链接到3个库,但是今天当我构建Ruby时,它与13连接。我不知道昨天和今天之间发生了什么变化,但我完全糊涂了 - 特别是很多在昨天的汇编之前,它所链接的图书馆已存在。

在Yesterday的Ruby可执行文件中,otool -L的结果是:

otool -L ruby
ruby:
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.8.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 489.0.0)

但今天它是:

otool -L ./ruby
./ruby:
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.8.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8)
    /usr/lib/libffi.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/local/opt/gdbm/lib/libgdbm.4.dylib (compatibility version 5.0.0, current version 5.0.0)
    /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libedit.3.dylib (compatibility version 2.0.0, current version 3.0.0)
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 489.0.0)

有谁知道发生了什么事?

我正在编译Ruby 2.4.2:

X="-arch i386 -mmacosx-version-min=10.5"
CFLAGS="$X" CXXFLAGS="$X" LDFLAGS="$X" ./configure --prefix=/tmp/ruby-deploy --with-openssl-dir=$(brew --prefix openssl)  --disable-install-doc --without-gmp

1 个答案:

答案 0 :(得分:0)

答案是我还跑了:

CFLAGS="$X" CXXFLAGS="$X" LDFLAGS="$X" ./configure --prefix=/tmp/ruby-deploy --with-openssl-dir=$(brew --prefix openssl) --with-static-linked-ext --disable-install-doc --without-gmp

一度注意--with-static-linked-ext。这导致了其他动态链接的库。

然而,因为我随后再次运行./configure没有该选项,我认为它会重置配置,但事实并非如此。

我通过擦除Ruby源文件夹并从github重新获取来发现了这个问题。运行最初的./configure(不包括--with-static-linked-ext解决了问题!