代码之家  ›  专栏  ›  技术社区  ›  kch

如何在Mac OS X上手动构建通用Ruby?How about with rvm?

  •  3
  • kch  · 技术社区  · 14 年前

    我从 official git mirror ,然后签出 ruby_1_9_2 分支机构。

    git clone http://github.com/ruby/ruby.git
    git checkout ruby_1_9_2
    

    所以,现在,我想编译1.9.2-head。但正如您稍后将看到的,我希望能找到一个同样适用于1.8的解决方案。

    标准的编译方法是:

    autoconf
    ./configure
    make
    make install
    

    这是可行的,但它给了我一个x86_-only版本:

    $ ruby -v
    ruby 1.9.2dev (2010-06-14 revision 28321) [x86_64-darwin10.3.0]
    

    I don't care about PPC, obviously, since I'm on 10.6, but I want to have both i386 and x86_64, because some things 需要在32位中完成。

    所以,我想知道的是:

    1. 魔术师高呼要用i386和x86_64拱门构建一个胖的二进制。
    2. I would also be interested in doing the same with my RVM 红宝石版本。

    可能是不必要的系统信息:

    $ system_profiler -detailLevel mini SPSoftwareDataType | ack '^ {6}' | head -3
          System Version: Mac OS X 10.6.4 (10F569)
          Kernel Version: Darwin 10.4.0
          64-bit Kernel and Extensions: No
    
    $ uname -a
    Darwin meaningless.local 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386
    
    2 回复  |  直到 13 年前
        1
  •  4
  •   kch    14 年前

    使用 --with-arch 选择权 ./configure :

    $ ./configure --with-arch=x86_64,i386
    

    ——拱 采用逗号分隔的体系结构列表,构建Ruby。


    由KCH添加:

    成功生成后的输出:

    $ file ruby
    ruby: Mach-O universal binary with 2 architectures
    ruby (for architecture x86_64): Mach-O 64-bit executable x86_64
    ruby (for architecture i386):   Mach-O executable i386
    
    $ arch -i386 ./ruby -v
    ruby 1.9.2dev (2010-06-29 revision 28468) [universal.i386-darwin10.4.0]
    
    $ arch -x86_64 ./ruby -v
    ruby 1.9.2dev (2010-06-29 revision 28468) [universal.x86_64-darwin10.4.0]
    
    $ ./ruby -v
    ruby 1.9.2dev (2010-06-29 revision 28468) [universal.x86_64-darwin10.4.0]
    
        2
  •  1
  •   kch    14 年前

    至于RVM, it says you can't have fat binaries 但事实并非如此 this commit 其中包括 my patch .

    使用您可以安装的最新RVM ruby-1.9.2-head 使用与手动生成中相同的配置标志:

    $ rvm install ruby-1.9.2-head -C --with-arch=x86_64,i386
    

    证明它是有效的:

    $ rvm use 1.9.2-head
    info: Using ruby 1.9.2 head
    
    $ file `which ruby` | perl -pe 's|^.*/||'
    ruby: Mach-O universal binary with 2 architectures
    ruby (for architecture x86_64): Mach-O 64-bit executable x86_64
    ruby (for architecture i386):   Mach-O executable i386