目前 Google SketchUp for 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
你能告诉我为什么吗?
更新1
Dan Rathbun做了一些测试,发现如下
在 Win32 上,当我试图让 Sketchup 加载任何 1.9.x 时,我得到了 ruby C 函数“rb_set_kcode”的“Entry point not found”,它不再在 1.9.x 中(它被重命名,而 Ruby 人没有将旧名称别名为新名称。)
基本上 Sketchup 在加载 Ruby 解释器后调用 rb_set_kcode 将字符编码设置为 UTF8。它适用于 1.8.x 分支中的任何 Ruby,但在 1.9.x 中,Ruby 项目完全重新设计了字符编码,并为所有 C 函数提供了新标识符,并添加了更多函数。
1.9.x 和 Sketchup 的解决方案似乎是 Sketchup 需要是“Ruby Version Agile”,这意味着 Google Guys 在 Boulder 的编码更改。