В настоящее время Google SketchUp для Mac имеет версию 1.8.5
для Ruby, которая, на мой взгляд, несколько устарела. Я могу обновить Ruby до 1.8.7 (версия OSX) с помощью следующих команд
$ cd /Applications/Google\ SketchUp\ 7/SketchUp.app/Contents/Frameworks/Ruby.framework/Versions/Current
$ ls
Headers/ Resources/ Ruby
$ ls Headers/
config.h defines.h intern.h missing.h ruby.h
$ rm -r Headers
$ ln -s /System/Library/Frameworks/Ruby.framework/Headers
$ ln -fs /System/Library/Frameworks/Ruby.framework/Ruby
SketchUp запускается без проблем, а консоль Ruby показывает версию 1.8.7.
1.9.2
Сейчас я пытаюсь пойти дальше и обновить до 1.9.2-rc2
. Для Google SketchUp требуется двоичный файл i386
, который можно создать с помощью следующих команд
$ cd ~/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/
$ rm 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
и когда я пытаюсь запустить SketchUp, я получаю следующее сообщение об ошибке
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: 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
Model: MacBookPro7,1, BootROM MBP71.0039.B05, 2 processors, Intel Core 2 Duo, 2.4 GHz, 4 GB, SMC 1.62f5
Не могли бы вы сказать мне, почему?
Update1
Дэн Рэтбун провел несколько тестов и обнаружил следующее
На Win32, когда я пытался заставить Sketchup загрузить любой 1.9.x, я получил "точку входа не найдена" для функции ruby C "rb_set_kcode", которой больше нет в 1.9.x (она была переименована, а пользователи Ruby - нет). псевдоним старого имени к новому имени.)
В основном Sketchup вызывает rb_set_kcode для установки кодировки символов в UTF8 сразу после загрузки интерпретатора Ruby. Он отлично работает для любого Ruby в ветке 1.8.x, но в 1.9.x проект Ruby полностью переработал кодировку символов, дал всем функциям C новые идентификаторы и добавил еще много функций.
Решение для 1.9.x и Sketchup, по-видимому, заключается в том, что Sketchup должен быть "Ruby Version Agile", что означает изменение кодировки Google Guys in Boulder.