2009-07-23 26 views
6

Tôi muốn biên dịch một ứng dụng Java nhỏ thành tệp thực thi Windows.Tại sao GCJ không tìm thấy các lớp từ các gói đã nhập của tôi?

Ứng dụng này rất nhỏ, chỉ có một lớp chính duy nhất, nhưng nó sử dụng Apache POI.

Khi tôi biên dịch, mọi thứ hoạt động tốt, miễn là tôi đặt POI Jar vào đối số đường dẫn lớp.

Nhưng khi nói đến liên kết, GCJ không thể giải quyết các tham chiếu các lớp trong gói POI. Các tin nhắn giống như sau:

undefined reference tp 'org::apache::poi:hssf:usermodel:HSSFWorkbook::class$' 

Tôi phải làm gì để liên kết đơn đăng ký của mình?

+0

Bạn đã thử thực sự bao gồm tệp jar từ Apache POI trong thư mục lib của dự án thay vì liên kết bên ngoài với nó trong đường dẫn lớp tại thời gian biên dịch? – amischiefr

+0

Có, cùng một vấn đề. –

+0

Đã thử với Sun JDK hoặc OpenJDK? Nếu một trong số chúng hoạt động, thì nó chỉ là (một lần nữa) một lỗi trong GCJ. – BalusC

Trả lời

5

Bạn phải biên dịch các lọ nhập khẩu thành .so thư viện riêng biệt. Đảm bảo cung cấp các Chum trong --classpath, cả khi biên dịch các thư viện trong khi biên dịch mã của bạn.

Một ví dụ, nơi tôi đang soạn thảo thư viện crypto GNU:

gcj --classpath=source/:libs/gnu-crypto.jar -fjni -c libs/gnu-crypto.jar -o libs/gnu-crypto.o 
gcj -shared -fPIC -o libs/libgnu-crypto.o libs/gnu-crypto.o -o libs/libgnu-crypto.so 

Cuối cùng, thực hiện thực thi của bạn thông qua một kịch bản shell tham khảo đường dẫn thư viện. Ví dụ:

#!/bin/sh 
export LD_LIBRARY_PATH=./libs/:$LD_LIBRARY_PATH 
exec ./MyJavaApp $* 
+1

Tôi mới bắt đầu sử dụng GCJ và thấy câu trả lời này cực kỳ hữu ích. Chỉ cần lưu ý rằng '-fPIC' là bắt buộc đối với lệnh đầu tiên cũng như từ kinh nghiệm của tôi cho đến nay. –

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