2011-08-23 31 views
5

Tôi đang làm việc với JNI. Tôi có một thư viện bao bọc (wrapper.so) sử dụng hai thư viện được chia sẻ: one.so và two.sođường dẫn tương đối cho các thư viện được chia sẻ

Mọi thứ đều hoạt động tốt. Tất cả * .so nằm trong thư mục lib, bên trong thư mục chương trình.

Vấn đề là, nếu tôi sao chép thư mục này sang máy tính khác, tôi sẽ gặp sự cố liên kết.

Hãy nói rằng tôi chạy trên một user2 máy (/ home/user2/chương trình), và tôi biên soạn trong một user1 máy (/ home/user1/chương trình), tôi nhận được lỗi khi liên kết:

UnsatisfiedLinkError: /home/user1/program/lib/one.so

làm thế nào tôi có thể làm việc liên kết các thư viện tương đối so với thư mục chương trình cha mẹ (như, tìm kiếm this_foler/lib ??

tôi đang soạn thảo như :

g++ -c -o src/wrapper.o src/wrapper.c 
g++ -shared -o wrapper.so src/wrapper.o one.so two.so 

Trả lời

8

How I can make the linking of the libraries relative to the parent program folder

Phụ thuộc vào hệ điều hành của bạn. Trên Linux, điều này có lẽ sẽ làm việc:

g++ -shared -o wrapper.so -Wl,-rpath='$ORIGIN' src/wrapper.o one.so two.so 

Lưu ý: dấu nháy đơn là quan trọng trong lệnh trên.

+1

@Rockskull nếu câu trả lời hoạt động, bạn có nghĩa vụ phải chấp nhận nó, bỏ phiếu cho nó hoặc cả hai. Nếu bạn không một số người có thể không bận tâm trả lời câu hỏi của bạn nex thời gian. –

+0

Xin lỗi. Mới đối với tràn ngăn xếp. Tôi chấp nhận nó, nhưng tôi không thể bỏ phiếu. – lcguida

+0

@EmployedRussian Bạn có biết lệnh tương ứng cho trình biên dịch intel không? Cảm ơn. – xslittlegrass

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