Ruby ARM 上交叉编译 Ruby 出现 rubygems.rb (LoadError)

yixiaoyang · 2014年09月05日 · 最后由 flowerwrong 回复于 2014年09月05日 · 4830 次阅读

因为使用的嵌入式平台,需要一种动态语言做一点后台工作,所以先用 ruby 试试。交叉编译很方便,install 列表:

installing binary commands:   /output/ruby/usr/bin
installing base libraries:    /output/ruby/usr/lib
installing arch files:        /output/ruby/usr/lib/ruby/1.9.1/arm-linux-eabi
installing pkgconfig data:    /output/ruby/usr/lib/pkgconfig
installing command scripts:   /output/ruby/usr/bin
installing library scripts:   /output/ruby/usr/lib/ruby/1.9.1
installing common headers:    /output/ruby/usr/include/ruby-1.9.1
installing manpages:          /output/ruby/usr/share/man/man1
installing extension objects: /output/ruby/usr/lib/ruby/1.9.1/arm-linux-eabi
installing extension objects: /output/ruby/usr/lib/ruby/site_ruby/1.9.1/arm-linux-eabi
installing extension objects: /output/ruby/usr/lib/ruby/vendor_ruby/1.9.1/arm-linux-eabi
installing extension headers: /output/ruby/usr/include/ruby-1.9.1/arm-linux-eabi
installing extension scripts: /output/ruby/usr/lib/ruby/1.9.1
installing extension scripts: /output/ruby/usr/lib/ruby/site_ruby/1.9.1
installing extension scripts: /output/ruby/usr/lib/ruby/vendor_ruby/1.9.1
installing extension headers: /output/ruby/usr/include/ruby-1.9.1/ruby

但是将其下载到开发板后出现 rubygems.rb LoadError:

# ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [arm-linux-eabi]
# ruby send_mail.rb 
<internal:gem_prelude>:1:in `require': cannot load such file -- rubygems.rb (LoadError)
        from <internal:gem_prelude>:1:in `<compiled>'
# 

猜测是 gem、ruby 库路径的问题,是不是还有些环境变量没设置呢?有经验的给点建议把哈哈~谢谢~ 不行就先 python 跑了,python+buildroot 交叉编译各种愉快啊。

一种可能是 load path 没初始化成功... 不知道这样能不能解决:

alias ruby="ruby -I/output/ruby/usr/lib/ruby/1.9.1 -I/output/ruby/usr/lib/ruby/1.9.1/arm-linux-eabi"

另外 ruby 2.1 才提供可以搬移编译的选项,1.9 大概 load path 在编译时就定好在 pc 上的路径而不是板上了,还有一种解决方法是编译时,就把目标路径 (./configure --prefix=...) 设置成要安装到的板上的对应的目录路径

嵌入设备用 mruby 好一点吧

java,py 靠谱,mruby,node-webkit 或许可以折腾下

#2 楼 @flowerwrong 恩嵌入式平台这的确不是 ruby 擅长的地方

#1 楼 @luikore 将 ruby 重新 alias 了一下试试,能找到 rubygems 但是又找不到 socket,重新检测所有缺失的 load path 实在是麻烦。prefix 可以设置目标目录,试了但这个没有作用。arm 平台还是用 python 吧,python2.7.3 没问题。

#4 楼 @yixiaoyang 最终你拷贝到的目录的路径和你编译时指定的 prefix 不一样吧?

另外 alias 方法的话,那个 load_path 里 lib 的还有 site_ruby 和 vendor_ruby 等路径,你参照着全部加一遍就可以了...

#3 楼 @yixiaoyang 话说玩 arm 用啥设备,非硬件出生。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号