2008-08-18 12 views
5

플랫폼 관련 C/C++ 코드에서 Java로 파일 시스템 변경 알림을 제공하기 위해 JNI (Java Native Interface) 세계로 첫 번째 여행을 막하려합니다. 누군가 내가 이것을 놓친 것 때문에 훌륭한 도서관을 제안하지 않는다면 말입니다.JNI 및 Java : ant는 make를 호출하거나 개미를 호출합니다.

JNI에 처음 소개되어서 JNI의 인터페이스 측면과 라이브러리 생성 측면에서 많은 설명서를 찾을 수 있었지만 기본 라이브러리를 작성하는 데별로 도움이되지 않았습니다.

기존 Java 소스에 대한 ant 기반의 빌드가 있으므로 라이브러리를 만들려면 make를 호출해야하거나 make를 얻는 것이 가장 좋은 경우 해결해야합니다. 라이브러리를 만든 후 개미를 호출 하시겠습니까?

두 옵션 모두 멋지게 뛰어 내리지 만, 두 가지 모두 개미가 코드를 컴파일하고 라이브러리를 직접 생성하도록 컴파일러를 호출하는 것보다 낫습니다.

답변

3

필자는 묵시적인 룰셋 및 공백 처리 때문에 make를 강력하게 싫어한다. 개인적으로 필자는 C 컴파일 작업을 위해 cpp 작업 (http://ant-contrib.sourceforge.net/cpptasks/index.html)을 사용합니다. 그것들은 make만큼 융통성이 없지만 훨씬 덜 복잡하기 때문에 학습자가 개발자에게 부담을 줄 필요가 없다는 것을 의미합니다.

+0

CPP 작업은 내가 필요로하는 것에 큰 도움이되었습니다. 나는 크로스 컴파일을해야 할 필요가 있었지만 cpptasks에 대한 백엔드에 사용할 클래스를 지정하는 기능은이를 해결했습니다. –

3

JNI의 간단한 대안으로 JNA : https://jna.dev.java.net/을 사용해보십시오.이 번거 로움을 해결할 수 있으며 원하는대로 할 수 있다고 가정하면 더 간단 할 수 있습니다.

+0

JNA는 내가 원하는 것을 수행하는 좋은 방법처럼 보였습니다.하지만 슬프게도 새로운 창 클래스를 만들고 콜백 함수를 다시 호출해야했기 때문에 불가능 해 보였으므로 JNI를 사용하지 않아야했습니다. –

1

저는 지금 비슷한 작업을하고 있습니다. swig.org에서 swig를 사용하는 것은 네이티브 라이브러리에 스텁을 생성하기 때문에 종종 더 쉽습니다.

질문에 대한 간단한 대답은 Java 라이브러리가 이미 빌드 된 후에 ant 파일이 make 파일을 실행해야한다는 것입니다. 네이티브 라이브러리는 Java 클래스 파일에서 생성 된 swig 생성 헤더에 의존하기 때문입니다.

당신이 개미에 익숙하고 새로운 시스템을 배우고 싶지 않다면 http://ant-contrib.sourceforge.net/cpptasks/index.html도 다른 포스터로 링크되어있어 개미에서 C++을 만들 수 있습니다.

1

JNI를 완전히 건너 뛰고 표준 출력에 알림을 쓰는 외부 프로그램을 사용합니다. Java는 프로그램 출력 스트림에서 간단히 읽을 수 있으며 필요한 모든 이벤트를 생성 할 수 있습니다. JNI는 단순한 통지 만 보내면된다.

또한 Linux에서는 "inotifywait"을 시작할 수 있습니다 (적절한 매개 변수와 함께 "man inotifywait"참조).

0

Codemesh에서 terp C++ 작업을 시도해 볼 수도 있습니다. 무료는 아니지만 C++ 컴파일러를 검색/지정하는 기능과 다중 플랫폼 빌드를위한 둘 이상의 컴파일러/프로세서 아키텍처/컴파일러 구성을 반복하는 기능과 결합 된 높은 수준의 추상화를 제공합니다.