我刚刚在一台带有新gem集(使用RVM)的机器上重新安装了ruby 1.8.7REE和MRI,但是当我尝试使用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。我的问题是:我需要做什么才能让我的系统找到这个符号,或者我还需要安装其他东西?欢迎任何调试建议。
发布于 2011-10-31 04:10:11
这是我为了让它在雪豹上工作而做的事情:
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-27 05:20:01
看起来它没有正确编译,并且缺少捆绑库的链接器标志。尝试构建它是LDFLAGS="-bundle"...我不确定如何使用RVM做到这一点,但我假设它将继承您提供的环境。
编辑|对不起,看起来正确的I标志可能是:LDFLAGS="-bundler_loader" EDIT 2|实际上,我不确定它是bundle还是bundle_loader...我在谷歌搜索结果中看到了这两个结果。
https://stackoverflow.com/questions/7907855
复制相似问题