如何在 Mac 版 Google SketchUp 中更新 Ruby?

如何在 Mac 版 Google SketchUp 中更新 Ruby?

目前 Google SketchUp for Mac 的 Ruby 版本1.8.5我觉得有点过时了。我可以通过以下命令将 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

丹·拉斯本做了一些测试,发现以下

在 Win32 上,当我尝试让 Sketchup 加载任何 1.9.x 时,我得到了一个“未找到入口点”的错误,这是针对 ruby​​ C 函数“rb_set_kcode”的,而该函数不再存在于 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 版本 Agile”,这意味着由博尔德的 Google 人员进行编码更改。

答案1

除了更新整个机器上的 Ruby(这可能特别麻烦且具有潜在破坏性)之外,另一种选择是使用 RVM 来管理特定版本的 Ruby。这尤其好,因为更新整个机器上的 Ruby 可能会导致依赖特定版本的任何其他应用程序崩溃。

您应该能够轻松地使 Sketch Up 使用 RVM 通过设置或直接从命令行启动来获取特定的 Ruby 版本。

右心室http://beginrescueend.com/

还有一个截屏直播详细介绍如何安装和管理 RVM

相关内容