【问题标题】:32bit Ruby compile fails on LionLion 上的 32 位 Ruby 编译失败
【发布时间】:2012-01-09 22:47:03
【问题描述】:

我正在尝试在 Lion 上安装 32 位版本的 Ruby,以便我可以使用 Oracle 做一些工作。但是我无法构建它。

据我所知,使用 1.9.3-p0:

linking miniruby
i686-apple-darwin11-gcc-4.2.1: i386: No such file or directory
make: *** [miniruby] Error 1

我的构建变量如下:

CC = /usr/bin/gcc-4.2
LD = ld
LDSHARED = /usr/bin/gcc-4.2 -dynamic -bundle
CFLAGS = -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=shorten-64-to-32 -Werror=implicit-function-declaration -arch i386 -pipe
XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT
CPPFLAGS = -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -I. -I.ext/include/i386-darwin11.2.0 -I./include -I.
DLDFLAGS = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace  -arch i386
SOLIBS = 

我正在使用以下配置:

./configure --with-arch=i386 --prefix=/Users/fenris/.rbenv/versions/32-bit

任何帮助将不胜感激。

【问题讨论】:

    标签: ruby macos osx-lion 32-bit


    【解决方案1】:

    我自己使用 rvm,但也尝试了 rbenv 并为我工作:

    RBENV 编译 32 位 ruby​​-1.9.3-p0

    !!!在执行此操作之前可能需要安装 libyaml

    安装 libyaml

    wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz
    tar -xzf yaml-0.1.4.tar.gz
    cd yaml-0.1.4
    ./configure --prefix=$HOME/.rbenv/versions/ruby-1.9.3-p0_32bit
    make 
    make install
    

    安装红宝石

    cd
    wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p0.tar.gz
    tar -xzf ruby-1.9.3-p0.tar.gz
    cd ruby-1.9.3-p0
    autoconf
    ./configure --disable-pthread --with-opt-dir=$HOME/.rbenv/versions/ruby-1.9.3-p0_32bit --with-arch=i386 --prefix=$HOME/.rbenv/versions/ruby-1.9.3-p0_32bit 
    make
    make install
    

    RVM 编译 32 位 ruby​​-1.9.3-p0

    export rvm_archflags='-arch i386'
    export rvm_architectures='i386'
    export rvm_configure_flags=--target=i686-apple-darwin11
    rvm install ruby-1.9.3-p0 --32 --patch osx-arch-fix -n i386
    

    ...

    验证您正在运行 32 位 ruby​​

    $ irb
    ['foo'].pack('p').size
    
    // should return 8 on 64bit and 4 on 32bit.
    

    【讨论】:

    • 如果您收到有关编译器错误的警告,请确保添加 --with-gcc=clang
    • 我在 ./configure(rbenv 版本)上收到以下错误。 ld:在 /usr/local/lib/libsqlite3.dylib 中,文件是为不受支持的文件格式构建的,该文件格式不是架构 i386 collect2 链接的架构(i386):ld 返回 1 退出状态关于我应该做什么的任何想法?
    • 如何强制 libyaml 构建为 32 位?我尝试了ARCHFLAGS="-arch i386",但它仍然构建为 64 位。由于这个原因,ruby make 无法构建 psych(说 libyaml 丢失)。
    • 找到了yaml问题的答案。配置 libyaml 时必须设置这些环境变量:CONFIGURE_OPTS="--with-arch=i386" CFLAGS="-arch i386" LDFLAGS="-arch i386"
    • @brad 你有没有想过如何解决 libsqlite.dylib 问题?
    【解决方案2】:

    如果你使用的是 rvm,试试这个:

    rvm_architectures="i386" CFLAGS=" -arch i386" LDFLAGS=" -arch i386" rvm install 1.9.3-p0
    

    【讨论】:

      【解决方案3】:
      rvm install 1.9.3-p0 --with-gcc=clang
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-24
        • 1970-01-01
        • 2020-12-07
        • 2017-03-08
        • 2012-11-18
        • 1970-01-01
        • 2016-07-11
        • 1970-01-01
        相关资源
        最近更新 更多