【问题标题】:How to update Ruby in Google SketchUp?如何在 Google SketchUp 中更新 Ruby?
【发布时间】:2010-07-26 08:05:39
【问题描述】:

目前 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

Dan Rathbun做了一些测试,发现如下

在 Win32 上尝试获取 Sketchup 时 加载任何 1.9.x 我得到了一个“条目 没有找到点”用于红宝石 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 的编码更改 博尔德。

【问题讨论】:

    标签: ruby ruby-1.9 sketchup ruby-1.8


    【解决方案1】:

    C 级 API 在 1.9.1 中发生了变化。请注意,gems 的路径表示 API 兼容性:.../1.8/... 表示 1.8 行,.../1.9.1/... 表示 1.9.2 行。

    这使得不重新编译就很难升级。

    你可以require "backports";这将使您获得 1.9.x 的大部分新方法,但不会获得新语法或字符串编码。

    【讨论】:

    • 如果 SketchUp 只需要对 Ruby 源代码进行一些小改动就可以运行1.9.x,那么重新编译对我来说就可以了。但是,由于缺乏 C 编程经验,我自己可能不会找到它。作为一种解决方法,我将在 Ruby 1.8.7 中编写一个 DSL,以通过在 SketchUp 中加载的中间 ruby​​ 文件与我的 1.9.x 类一起使用。我真的希望最终可以使用 Ruby 1.9 运行 SketchUp,这样就可以跳过这个不必要的步骤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多