Чем отличается Ruby в стандартном дистрибутиве OS X, RVM и MacPorts?

Я задал вопрос в SuperUser об обновлении версии Ruby в Google SketchUp. . Кажется, что между Ruby, поставляемым со стандартным дистрибутивом OS X, и Ruby, устанавливаемым RVM или MacPorts, есть что-то другое. Я получаю следующее сообщение об ошибке, когда пытаюсь использовать RVM или MacPorts Ruby 1.9.1

Exception Type:  EXC_BREAKPOINT (SIGTRAP)

Dyld Error Message:
  Library not loaded: @executable_path/../Frameworks/Ruby.framework/Versions/A/Ruby
  Referenced from: /Applications/Google SketchUp 7/SketchUp.app/Contents/MacOS/SketchUp
  Reason: no suitable image found.  Did find:
    /Applications/Google SketchUp 7/SketchUp.app/Contents/MacOS/../Frameworks/Ruby.framework/Versions/A/Ruby: mach-o, but wrong architecture
    /Applications/Google SketchUp 7/SketchUp.app/Contents/MacOS/../Frameworks/Ruby.framework/Versions/A/Ruby: mach-o, but wrong architecture
    /usr/lib/Ruby: not a file

Model: MacBookPro7,1, BootROM MBP71.0039.B05, 2 processors, Intel Core 2 Duo, 2.4 GHz, 4 GB, SMC 1.62f5

Но работает с Ruby 1.8.7 от /System/Library/Frameworks/Ruby.framework/


ОБНОВЛЕНИЕ1

Так как это было >объяснено Алексом Мне нужно скомпилировать Ruby с архитектурой i386. Можно сделать это для MacPorts и RVM, но у меня ни один из способов не сработал из-за разных ошибок.

  1. Как forece i386 построен на macports Snow Leopard ?
  2. Внутренние файлы конфигурации
  3. Darwin OS

Поэтому я решил собрать Ruby 1.9.2-rc2 из исходников.

$ ARCHFLAGS="-arch i386"  CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure  --with-arch=i386
$ make && sudo make install

и скопируйте соответствующие файлы в SketchUp

$ cd /Applications/Google\ SketchUp\ 7/SketchUp.app/Contents/Frameworks/Ruby.framework/Versions/A/
$ rm -r Headers Ruby
$ cp /usr/local/bin/ruby Ruby
$ mkdir Headers
$ cp /usr/local/include/ruby-1.9.1/i386-darwin10.4.0/ruby/config.h Headers/
$ cp /usr/local/include/ruby-1.9.1/ruby.h Headers/
$ cp -r /usr/local/include/ruby-1.9.1/ruby/* Headers/
$ ls Headers
backward/   defines.h   dl.h        intern.h    missing.h   re.h        ruby.h      util.h      vm.h
config.h    digest.h    encoding.h  io.h        oniguruma.h regex.h     st.h        version.h

На этот раз я получил следующее сообщение

Dyld Error Message:
  Library not loaded: @executable_path/../Frameworks/Ruby.framework/Versions/A/Ruby
  Referenced from: /Applications/Google SketchUp 7/SketchUp.app/Contents/MacOS/SketchUp
  Reason: no suitable image found.  Did find:
    /Applications/Google SketchUp 7/SketchUp.app/Contents/MacOS/../Frameworks/Ruby.framework/Versions/A/Ruby: can't map
    /Applications/Google SketchUp 7/SketchUp.app/Contents/MacOS/../Frameworks/Ruby.framework/Versions/A/Ruby: can't map
    /usr/local/lib/Ruby: not a file
    /usr/lib/Ruby: not a file

person Andrei    schedule 25.07.2010    source источник


Ответы (2)


Похоже, у вас есть версии библиотеки Ruby в каталогах Sketchup для двух архитектур (вероятно, 32-битная Intel и PPC, я полагаю) и вы пытаетесь использовать двоичный файл Ruby, созданный на основе третьей и другой архитектуры (вероятно, 64-битной). немного информации, я думаю). Вы можете проверить с помощью команды arch в приглашении оболочки Terminal.App.

Если это действительно окажется проблемой, вы могли бы попытаться собрать Ruby 1.9 из исходников, ориентируясь на 32-битные процессоры Intel...? (Я не знаю ни одного предварительно упакованного Ruby 1.9 для Mac, созданного для 32-битных процессоров Intel - конечно, вполне могут быть некоторые, о которых я не знаю!-).

person Alex Martelli    schedule 25.07.2010
comment
Алекс, я собрал Ruby 1.9.2-rc2 из исходников и попытался запустить SketchUp. Теперь он выдает мне еще один отчет об ошибке -- can't map. Знаете в чем может быть причина? - person Andrei; 26.07.2010

Было ли это решено? Чтобы ответить на общий вопрос в вашем заголовке, поэтому я нажал на это:

Системный Ruby (кажется, 1.8.7) поставляется предварительно загруженным и не перезаписывается MacPorts или RVM. MacPorts по умолчанию записывает в другой каталог, и Терминал начинает разрешать эту новую установку, оставляя систему Ruby неиспользованной. RVM создает свои собственные виртуальные установки Ruby и может переключаться между ними и системным Ruby с помощью $ rvm use.

person Michael    schedule 12.01.2011