2013-03-15 32 views
7

Có thể xây dựng một HelloWorld.lib và tải nó vào một ứng dụng Java bằng JNI không? Hoặc nó chỉ hoạt động với các thư viện được chia sẻ?Có thể liên kết một thư viện tĩnh với Java thông qua JNI không?

Tôi không thể tìm thấy câu trả lời rõ ràng về tài liệu JNI, không có tham chiếu đến "thư viện tĩnh".

+0

Kiểm tra http://stackoverflow.com/questions/2349093/static-libraries-and-jni – BackSlash

+0

@Harlandraka tôi thấy câu hỏi trước khi gửi bài, nhưng liên kết là đã chết. Ngoài ra, bây giờ nó trực tiếp câu hỏi-trả lời thay vì câu hỏi-bình luận. – quimnuss

Trả lời

3

Nó cần phải là thư viện động. May mắn thay, bạn có thể xây dựng một thư viện động từ một thư viện tĩnh.

+0

Cũng giống như tôi nghĩ ... Vì vậy, tôi đoán tôi sẽ phải biên dịch lại các thư viện tĩnh bằng cách sử dụng cờ -fPIC, damn. – quimnuss

+0

Hoặc quấn nó trong thư viện động/chia sẻ, tránh cần phải biên dịch lại. –

+0

Bạn có thể dán liên kết, làm cách nào để có thể nhận thư viện được chia sẻ từ thư viện tĩnh chưa được biên dịch với fPIC? – quimnuss

1

Để tải thư viện vào thời gian chạy, thư viện phải là một dll (cửa sổ). Nếu bạn có một thư viện tĩnh (lib) và bạn phải sử dụng nó qua JNI, bạn phải tạo một wrapper dll

0

Bạn sẽ phải liên kết nó với JVM và bạn không có cách nào để làm điều đó. Đó là lý do tại sao JNI được định nghĩa với các thư viện được chia sẻ chứ không phải các thư viện tĩnh.

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