2011-10-26 30 views
5

剛做了一個全新安裝的紅寶石1.8.7稀土元素和核磁共振在一臺機器上用新鮮的寶石套裝(使用RVM)然而在他們每一個當我嘗試使用memprof我得到這個錯誤紅寶石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

Yay爲曖昧標籤[符號]。 –

+1

我已經發布了關於該標記的元問題:http://meta.stackexchange.com/questions/110399/how-should-the-symbols-tags-be-split-up –

回答

1

看起來它沒有正確編譯,並且缺少bundle庫的鏈接器標誌。嘗試構建它是LDFLAGS="-bundle" ...我不確定你如何使用RVM做到這一點,但我認爲它會繼承你給它的環境。

編輯|對不起,看起來像正確的ld標誌可能是:LDFLAGS="-bundler_loader" 編輯2 |實際上,我不確定它是bundle還是bundle_loader ...我在Google搜索結果中看到了兩者。

+0

我嘗試使用'rvm export'兩面旗幟,我仍然得到錯誤。也許那不是正確的命令? – Schneems

+0

'rvm export'似乎是用於管理gemsets,而不是用於更改編譯設置。首先嚐試刪除memprof,然後執行'LDFLAGS =「 - 將」gem install memprof「捆綁到一起,如果這不起作用,請嘗試用相同的方法構建ruby(使用LDFLAGS設置)......從正在嘗試的backtrace使用捆綁。我認爲在嘗試加載gem本身時實際上是ruby。 – d11wtq

+0

嘗試'LDFLAGS =「 - 捆綁」gem install memprof「和」LDFLAGS =「 - 捆綁」rvm install 1.8.7「,兩者都不起作用。 – Schneems

3

這是我做過什麼讓它在雪豹:

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

然後(用-bundle和-bundleloader選項替換-dynamiclib)

make install(產生memprof.bundle並將其複製到memprof */IIb)的

編輯:只是爲了澄清,$(RUBY)必須包含ruby解釋器的完整路徑名(可執行文件)。在RVM下,Makefile將它初始化爲合適的解釋器,所以上面的行可以毫無問題地工作。

+0

感謝您的回覆,我會盡快嘗試一下,一有機會。上面的改變究竟是什麼? – Schneems

+2

-bundle創建一個包,一個特定於mac的動態庫格式。 memprof包提供了主機程序中的符號,即ruby解釋器。 -bundle_loader選項指向要加載此包的特定可執行文件。 –

+0

謝謝,這工作。我提交了一個bug:https://github.com/ice799/memprof/issues/18 – John

相關問題