5

刚刚在具有新 gem 集的机器上重新安装了 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。我的问题是:我需要做什么才能让我的系统找到这个符号,还是我需要安装其他东西?欢迎任何调试建议。

4

2 回答 2

3

这就是我为让它在 Snow Leopard 上工作所做的工作:

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 将其初始化为适当的解释器,因此上面的行没有问题。

于 2011-10-30T20:10:11.307 回答
1

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

编辑 | 抱歉,看起来正确的 ld 标志可能是:LDFLAGS="-bundler_loader" EDIT 2 | 实际上,我不确定是不是bundle……bundle_loader我在 Google 结果中都看到了。

于 2011-10-26T21:20:00.710 回答