开发者

How to update Ruby in Google SketchUp?

Currently Google SketchUp for Mac has Ruby version 1.8.5 which I find a bit outdated. I can update Ruby to 1.8.7 (OSX's version) by the following commands

$ 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 starts without a problem and Ruby console shows version 1.8.7.

1.9.2

Now I try to go further and update to 1.9.2-rc2. Google SketchUp requires i386 binary, which can be produced by the following commands

$ cd ~/ruby-1.9.2-rc2/
$ ARCHFLAGS="-arch i386"  CFLAGS="-arch i386" LDFLAGS="-arch i386" ./configure  --with-arch=i386
$ make && sudo make install

Then I copy the necessary files to 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

and when I try to start SketchUp I get the following error report

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

Could you tell me why?

UPDATE1

Dan Rathbun made some tests and found the following

On Win32 when I tried to get Sketchup to load any 1.9.x I got an "Entry point not found" for the ruby C function "rb_set_kcode" which is no longer in 1.9.x (it was renamed, and the Ruby people did not alias the old name to the new name.)

Basically Sketchup calls rb_set_kcode to set the character encodi开发者_StackOverflow中文版ng to UTF8 just after loading the Ruby interpreter. It works fine for any Ruby in the 1.8.x branch, but in 1.9.x the Ruby project totally reengineered the character encoding, and gave all the C functions new identifiers, and added alot more functions.

The solution for 1.9.x and Sketchup seems to be that Sketchup needs to be "Ruby Version Agile", which means a coding change by the Google Guys in Boulder.


The C level API has changed in 1.9.1. Notice that the paths to gems indicate the API compatibility: .../1.8/... for the 1.8 line and .../1.9.1/... for the 1.9.2 line.

This makes it very difficult to upgrade without recompiling.

You can require "backports"; this will get you the most of the new methods of 1.9.x, but not the new syntax or the string encoding.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜