Ruby 1.8.7:找不到符号错误

时间:2011-10-26 19:34:10

标签: ruby rubygems symbols memprof

刚刚在装有新宝石套装的机器上进行了全新安装的ruby 1.8.7 REE和MRI(使用RVM)但是当我尝试使用memprof时,每次都会出现此错误

$ gem install memprof
$ irb
>> require 'rubygems'
>> require 'memprof'
>> LoadError: dlopen(/Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle, 9): Symbol not found: __mh_bundle_header
  Referenced from: /Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle
  Expected in: flat namespace
 in /Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle - /Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle
    from /Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle
    from /Users/schneems/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in `require'
    from (irb):2

错误为Symbol not found: __mh_bundle_header。我的问题是:我需要做些什么来让我的系统找到这个符号,或者我需要安装其他东西?欢迎任何调试建议。

2 个答案:

答案 0 :(得分:3)

这就是我在雪豹上工作所做的:

cd ..../gems/memprof-0.3.10/ext/

编辑Makefile,搜索LD_SHARED =

改变

LDSHARED = cc -arch x86_64 -dynamiclib -undefined suppress -flat_namespace

LDSHARED = cc -arch x86_64 -bundle -bundle_loader $(RUBY) -undefined suppress -flat_namespace

(将-dynamiclib替换为-bundle和-bundleloader选项)

然后,

make install(创建memprof.bundle并将其复制到memprof * / lib)

编辑:为了澄清,$(RUBY)必须包含ruby解释器(可执行文件)的完整路径名。在RVM下,Makefile将它初始化为适当的解释器,因此上面的行工作没有问题。

答案 1 :(得分:1)

看起来它没有正确编译,并且缺少捆绑包库的链接器标志。尝试构建它是LDFLAGS="-bundle" ...我不确定你是如何使用RVM做的,但我认为它会继承你给它的环境。

编辑|抱歉,看起来正确的ld标志可能是:LDFLAGS="-bundler_loader" 编辑2 |实际上,我不确定它是bundle还是bundle_loader ......我在Google搜索结果中都看到了这两种情况。