Tôi có một ứng dụng yêu cầu liên kết với libjvm
(thư viện từ JDK cần thực hiện các kết buộc JNI). Khi tôi nói với vị trí của libjvm.dylib
sử dụng -L
, nó biên dịch và liên kết thành công. Tuy nhiên khi tôi chạy nhị phân tôi nhận được:Liên kết thư viện động (libjvm.dylib) trong Mac OS X (vấn đề rpath)
dyld: Library not loaded: @rpath/libjvm.dylib
Referenced from: <my home directory>/./mybinary
Reason: image not found
Cho đến nay tôi phát hiện ra rằng tôi có thể chạy nêu rõ LD_LIBRARY_PATH nhị phân của tôi như vậy:
LD_LIBRARY_PATH=<path to libfolder installation> ./mybinary
Nhưng tất nhiên tôi không muốn điều đó. Tại sao tôi nên chỉ định chính xác vị trí nếu tôi phải cung cấp lại nó mỗi lần tôi khởi động ứng dụng ?!
Tôi cũng đã học được rằng thư viện động trên mac os x có được một loại tem cho biết vị trí đó. Tuy nhiên tôi không biết những gì rpath
là (có vẻ như một biến cho tôi, nhưng làm thế nào tôi có thể thiết lập nó trong quá trình liên kết?).
Ứng dụng được xây dựng bằng haskell, nhưng tôi cũng có thể liên kết tốt các tệp đối tượng theo cách thủ công bằng cách sử dụng ld
. Tuy nhiên, tôi đang bị mắc kẹt trên điều đó rpath - là nó có thể đặc biệt cho các thư viện JDK?
Dưới đây là những gì tôi làm để xây dựng:
ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary