2008-08-18 27 views
5

Tôi sắp thực hiện chuyến đi đầu tiên của mình vào thế giới của JNI (Giao diện bản địa Java) để cung cấp thông báo thay đổi hệ thống tập tin từ mã C/C++ cụ thể cho nền tảng Java. Đó là trừ khi ai đó đề nghị một số thư viện tuyệt vời để làm điều này mà tôi đã bỏ lỡ.JNI và Java: ant gọi điện thoại thực hiện hoặc làm cho kiến ​​kiến?

Làm quen với JNI Tôi đã quản lý để tìm nhiều tài liệu ở phía giao diện của nó và bên tạo thư viện của nó, nhưng tôi không tìm thấy nhiều về xây dựng thư viện gốc.

Tôi đã có một bản dựng hiện có dựa trên kiến ​​cho nguồn Java sẵn có, vì vậy tôi đang cố gắng tìm hiểu xem tôi có nên tạo kiến ​​để gọi để tạo thư viện hay không. gọi kiến ​​sau khi tạo thư viện?

Không có tùy chọn nhảy ra như là terribly tốt đẹp, nhưng cả hai dường như tốt hơn so với cố gắng để có được kiến ​​để gọi một trình biên dịch để biên dịch mã và tạo ra các thư viện trực tiếp.

Trả lời

3

Tôi thực sự không thích vì quy tắc ngầm và điều trị khoảng trắng. Cá nhân tôi sẽ sử dụng các nhiệm vụ cpp (http://ant-contrib.sourceforge.net/cpptasks/index.html) để thực hiện việc biên dịch C của tôi. Chúng không linh hoạt như thực hiện nhưng chúng cũng kém phức tạp hơn và điều đó có nghĩa là bạn không phải gánh nặng cho các nhà phát triển của mình bằng việc học.

+0

Các tác vụ CPP hoạt động tốt cho những gì tôi cần nhờ. Tôi đã kết thúc cần phải làm một số biên dịch chéo nhưng khả năng xác định lớp nào để sử dụng cho back-end cho cpptasks giải quyết điều đó. –

3

Là một sự thay thế đơn giản hơn cho JNI, hãy thử JNA: https://jna.dev.java.net/, có thể giải quyết rắc rối này cho bạn và đơn giản hơn (giả sử nó có thể làm những gì bạn muốn).

+0

JNA trông giống như một cách hay để làm những gì tôi muốn, nhưng thật đáng buồn là tôi phải bắt đầu tạo các lớp cửa sổ mới và gọi lại các chức năng cho nó, điều này dường như không khả thi nên tôi phải quay lại sử dụng JNI. –

1

Tôi đang làm việc trên một thứ tương tự ngay bây giờ. Xin lưu ý rằng việc sử dụng swig từ swig.org thường dễ dàng hơn vì nó tạo ra các thư mục gốc cho thư viện gốc cho bạn.

Câu trả lời ngắn cho câu hỏi của bạn là tệp ant sẽ chạy tệp tạo sau khi thư viện java đã được xây dựng, vì thư viện gốc phụ thuộc vào tiêu đề được tạo bằng swig, được tạo từ tệp lớp java.

Nếu bạn siêu quen thuộc với kiến ​​và không muốn tìm hiểu hệ thống mới, thì http://ant-contrib.sourceforge.net/cpptasks/index.html, cũng được liên kết bởi một người đăng khác, sẽ cho phép bạn tạo C++ trong kiến.

1

Tôi muốn bỏ qua JNI hoàn toàn và sử dụng chương trình bên ngoài viết thông báo về đầu ra tiêu chuẩn. Java sau đó có thể đọc đơn giản từ luồng đầu ra của chương trình và tạo ra bất kỳ sự kiện nào là cần thiết. JNI là cách làm việc quá nhiều nếu tất cả những gì bạn muốn là gửi thông báo đơn giản.

Ngoài ra, trên Linux bạn chỉ có thể bắt đầu "inotifywait" (với một số thông số phù hợp, xem "man inotifywait").

0

Bạn cũng có thể thử tác vụ terp C++ tại Codemesh. Chúng không miễn phí nhưng chúng cung cấp một mức trừu tượng cao cùng với khả năng khám phá/xác định trình biên dịch C++ và khả năng lặp qua nhiều hơn một cấu trúc trình biên dịch/kiến ​​trúc/trình biên dịch để xây dựng nhiều nền tảng.

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