2011-10-26 17 views
5

新鮮な宝石セット(RVMを使用して)で1.8.7 REEとMRIを新しくインストールしましたが、memprofを使用しようとすると、エラーRuby 1.8.7:シンボルが見つかりませんエラー

$ gem install memprof 
$ irb 
>> require 'rubygems' 
>> require 'memprof' 
>> LoadError: dlopen(/Users/schneems/.rvm/gems/[email protected]/gems/memprof-0.3.10/lib/memprof.bundle, 9): Symbol not found: __mh_bundle_header 
    Referenced from: /Users/schneems/.rvm/gems/[email protected]/gems/memprof-0.3.10/lib/memprof.bundle 
    Expected in: flat namespace 
in /Users/schneems/.rvm/gems/[email protected]/gems/memprof-0.3.10/lib/memprof.bundle - /Users/schneems/.rvm/gems/[email protected]/gems/memprof-0.3.10/lib/memprof.bundle 
    from /Users/schneems/.rvm/gems/[email protected]/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です。私の質問はこれです:私はこのシンボルを見つけるために私のシステムを得るために何をする必要がありますか、または私はインストールする必要がある何か他にありますか?デバッグの提案が歓迎されました。

+0

あいまいなタグ[シンボル]です –

+1

私はタグに関するメタ質問を投稿しました:http://meta.stackexchange.com/questions/110399/how-should-the-symbols-tags-be-split-up –

答えて

1

正しくコンパイルされておらず、バンドルライブラリのリンカフラグがないようです。それを構築しようとしてみてくださいLDFLAGS="-bundle" ...私はあなたがRVMを使ってそれをどうやっているのかはわかりませんが、あなたがそれを与える環境を継承すると仮定します。

EDIT |申し訳ありませんが、正しいldフラグが次のようになります:LDFLAGS="-bundler_loader" EDIT 2 |実際には、bundlebundle_loaderかどうかはわかりません...私はGoogleの検索結果で両方見ています。

+0

私は 'rvm export'を両方のフラグと私はまだエラーを取得しています。おそらく正しいコマンドではないでしょうか? – Schneems

+0

'rvm export'はgemsetを管理するためのもので、コンパイル設定を変更するものではないようです。最初にmemprofを削除してから、 'LDFLAGS =" - bundle "gem install memprof'を実行してください。それでもうまくいかない場合は、同じ方法で(LDFLAGSを設定して)ルビーをビルドしてみてください...試しているバックトレースからは分かりませんバンドルを使用する。宝石そのものをロードしようとすると、実際にはルビーだと思います。 – d11wtq

+0

は 'LDFLAGS ="を試しました - "gem install memprof'と' LDFLAGS = " - バンドル" rvm install 1.8.7'と一緒にいてどちらもうまくいきませんでした。 – Schneems

3

これは私がそれはSnow Leopardの上で動作させるために何をしたかである:

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

Makefileを編集し、へ

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

からLD_SHARED =

の変更を検索

その後(-bundleと-bundleloaderオプションで-dynamiclib置き換え)LDSHARED = cc -arch x86_64 -bundle -bundle_loader $(RUBY) -undefined suppress -flat_namespace

make install(memprof.bundleコピーを作成することは*/libがmemprofへ)

編集:明確にするために、$(RUBY)には、ルビインタープリタ(実行ファイル)へのフルパス名が含まれていなければなりません。 RVMでは、Makefileは適切なインタプリタに初期化します。したがって、上記の行は問題なく動作します。

+0

返事ありがとう、私はチャンスを得るとすぐに試してみます。上記の変更は正確には何ですか? – Schneems

+2

-bundleは、Mac固有の動的ライブラリ形式であるバンドルを作成します。 memprofバンドルには、ホストプログラム内のシンボル、ルビインタープリタが参照されます。 -bundle_loaderオプションは、このバンドルをロードする特定の実行可能ファイルを指します。 –

+0

ありがとう、これは働いた。私はバグを提出しました:https://github.com/ice799/memprof/issues/18 – John

関連する問題