代码之家  ›  专栏  ›  技术社区  ›  Andy

如何在googlesketchup中更新Ruby?

  •  1
  • Andy  · 技术社区  · 14 年前

    目前googlesketchup 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上,当我试图 要加载任何1.9.x,我有一个“条目 ruby C的“未找到点” 函数“rb\u set\u kcode”,它不是 在1.9.x中更长(它被重命名,并且 红宝石人没有把旧的化名 新名称的名称。)

    基本上Sketchup调用rb\u set\u kcode 将字符编码设置为UTF8 刚装完红宝石 翻译。对任何人都很好 Ruby在1.8.x分支中,但在1.9.x中 Ruby项目完全重新设计 字符编码,并给出了所有 C函数使用新的标识符,并且 增加了更多的功能。

    1.9.x和Sketchup的解决方案 看来Sketchup需要 “Ruby版本敏捷”,意思是 谷歌人在 巨石。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Marc-André Lafortune    14 年前

    C级API在1.9.1中已更改。请注意,gems的路径表示API兼容性: .../1.8/... 对于1.8线和 .../1.9.1/... 对于1.9.2线。

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

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