2011-10-26 37 views
5

Chỉ cần cài đặt mới ruby ​​1.8.7 REE và MRI trên máy bằng bộ đá quý mới (Sử dụng RVM) Tuy nhiên, trong mỗi khi chúng cố gắng sử dụng memprof lỗiRuby 1.8.7: Biểu tượng không tìm thấy Lỗi

$ 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 

Lỗi là Symbol not found: __mh_bundle_header. Câu hỏi của tôi là: tôi cần phải làm gì để hệ thống của tôi tìm thấy biểu tượng này, hoặc có cái gì khác mà tôi cần phải cài đặt? Mọi đề xuất gỡ lỗi đều được hoan nghênh.

+0

Yay cho thẻ không rõ ràng [biểu tượng]. –

+1

Tôi đã đăng câu hỏi meta về thẻ: http://meta.stackexchange.com/questions/110399/how-should-the-symbols-tags-be-split-up –

Trả lời

1

Có vẻ như nó chưa được biên dịch chính xác và thiếu cờ liên kết cho thư viện gói. Hãy thử xây dựng nó là LDFLAGS="-bundle" ... Tôi không chắc chắn làm thế nào bạn làm điều đó với RVM, nhưng tôi giả sử nó sẽ kế thừa môi trường bạn cung cấp cho nó.

EDIT | Rất tiếc, có vẻ như cờ ld chính xác có thể là: LDFLAGS="-bundler_loader" CHỈNH SỬA 2 | Trên thực tế, tôi không chắc chắn nếu đó là bundle hoặc bundle_loader ... Tôi thấy cả hai trong kết quả của Google.

+0

Tôi đã thử sử dụng 'xuất rvm' với cả cờ và tôi vẫn gặp lỗi. Có lẽ thats không phải là lệnh phải không? – Schneems

+0

'rvm export' dường như là để quản lý gemets, không phải để thay đổi cài đặt biên dịch. Trước tiên, hãy thử xóa memprof, sau đó thực hiện 'LDFLAGS =" - bundle "gem install memprof' và nếu điều đó không hiệu quả, hãy thử tạo ruby ​​theo cùng một cách (với tập hợp LDFLAGS) ... không rõ ràng từ backtrace đang cố gắng để sử dụng gói. Tôi nghĩ rằng nó thực sự ruby ​​khi cố gắng để tải đá quý chính nó. – d11wtq

+0

đã thử 'LDFLAGS =" - gói "gem install memprof' và cũng' LDFLAGS = "- bundle" rvm install 1.8.7' và không hoạt động. – Schneems

3

Đây là những gì tôi đã làm để có được nó để làm việc trên Snow Leopard:

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

Sửa Makefile, tìm kiếm LD_SHARED =

Thay đổi từ

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

để

LDSHARED = cc -arch x86_64 -bundle -bundle_loader $(RUBY) -undefined suppress -flat_namespace

(thay thế -dynamiclib với -bundle và các tùy chọn -bundleloader)

Sau đó,

make install (mà tạo ra memprof.bundle và sao chép nó vào memprof */lib)

Chỉnh sửa: Chỉ cần làm rõ, $(RUBY) phải chứa tên đầy đủ cho trình thông dịch ruby ​​(tệp thực thi). Trong RVM, Makefile khởi tạo nó cho trình thông dịch thích hợp, vì vậy dòng trên hoạt động mà không có vấn đề gì.

+0

cảm ơn vì đã trả lời, tôi sẽ dùng thử ngay khi tôi có cơ hội. Chính xác những thay đổi trên đang làm gì? – Schneems

+2

—trình tạo một gói, một định dạng thư viện động cụ thể cho mac. Gói memprof có tham chiếu đến các biểu tượng trong chương trình máy chủ, trình thông dịch ruby. Tùy chọn -bundle_loader trỏ đến tệp thực thi cụ thể sẽ tải gói này. –

+0

Cảm ơn, điều này đã hiệu quả. Tôi đã gửi một lỗi: https://github.com/ice799/memprof/issues/18 – John

Các vấn đề liên quan