Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 1.8.7:找不到符号错误_Ruby_Rubygems_Symbols_Memprof - Fatal编程技术网

Ruby 1.8.7:找不到符号错误

Ruby 1.8.7:找不到符号错误,ruby,rubygems,symbols,memprof,Ruby,Rubygems,Symbols,Memprof,刚刚在一台有新的gem集(使用RVM)的机器上重新安装了ruby 1.8.7 REE和MRI,但是在我尝试使用memprof时,每个gem中都出现了这个错误 $ gem install memprof $ irb >> require 'rubygems' >> require 'memprof' >> LoadError: dlopen(/Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0

刚刚在一台有新的gem集(使用RVM)的机器上重新安装了ruby 1.8.7 REE和MRI,但是在我尝试使用memprof时,每个gem中都出现了这个错误

$ 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

错误为
未找到符号:\uuuuMH\uBundle\u标头
。我的问题是:我需要做什么才能让我的系统找到这个符号,还是需要安装其他东西?欢迎任何调试建议。

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

编辑|抱歉,正确的ld标志可能是:
LDFLAGS=“-bundler\u loader”

编辑2 |实际上,我不确定它是
bundle
还是
bundle\u loader
。。。我在谷歌搜索结果中看到了这两个方面。

这就是我让它在雪豹上工作的原因:

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

编辑Makefile,搜索LD_共享=

LDSHARED=cc-arch x86_64-dynamiclib-undefined suppress-flat_命名空间

LDSHARED=cc-arch x86\u 64-bundle-bundle\u loader$(RUBY)-undefined suppress-flat\u命名空间

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

那么

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


编辑:只是为了澄清,
$(RUBY)
必须包含RUBY解释器(可执行文件)的完整路径名。在RVM下,Makefile将其初始化为适当的解释器,因此上面的代码行可以正常工作

对模棱两可的标记[symbol]很好。我发布了一个关于该标记的元问题:我尝试使用带有两个标志的
rvm export
,但仍然出现错误。也许这不是正确的命令?
rvm export
似乎是用于管理gemset,而不是用于更改编译设置。首先尝试删除memprof,然后执行
LDFLAGS=“-bundle”gem安装memprof
,如果不起作用,请尝试以相同的方式构建ruby(设置了LDFLAGS)。。。从试图使用bundle的backtrace中不清楚。我认为在尝试加载gem本身时它实际上是ruby。尝试了
LDFLAGS=“-bundle”gem install memprof
LDFLAGS=“-bundle”rvm install 1.8.7
,但都不起作用。感谢您的回复,我一有机会就会尝试。上面的更改到底在做什么?-bundle创建了一个bundle,一种特定于mac的动态库格式。memprof包引用了主机程序ruby解释器中的符号。-bundle_loader选项指向要加载此捆绑包的特定可执行文件。