5

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 に答える