본문 바로가기

단편글

Linux에서 JNI 쓸 때 라이브러리 문제

요즘 프로젝트에서 JAVA를 많이 쓰고 있다.

규격서에 JAVA를 명시해두었기에 우리 팀 프로젝트중에서 유일하게 JAVA를 쓰는 프로젝트를 하고 있기 때문이다.

학부 때 이후로 JAVA를 쓴 적이 없으니 5년은 안쓴 것 같다.

원래 자바를 메인으로 하던 사람이 아니라 좀만 복잡한게 나오면 골머리를 앓고 있다.

특히 가장 문제가 되었던게 이 JNI.

임베디드 특성상 하드웨어 제어를 자주 해야한다.

간단한 Serial 통신이면 exec로 하면 되는데, 문제는 다른 C/C++ 라이브러리를 가져와야 할 때이다.

처음에는 JNA를 쓰려고 했는데, JNA는 C++은 못쓴다고 해서, 또 JNI 함수까지 규격서에 정의가 되어 있어서 어쩔수없이 JNI로 갈아타게 되었다.

Header 만들고, C작성하고, so파일 만드는것까진 잘 되었다.

이걸 loadLibrary로 불러오려고 했더니 계속 오류가 난다.

loadLibrary
이 오류때문에 반나절을 날려먹었다.

검색해보면 Linux에서는 LD_LIBRARY_PATH가 java.library.path로 나타난다고 한다. 실패.

-Djava.library.path로 property 설정을 해주면 된다고 한다. 실패.

 

더 찾아보다보니 loadLibrary 말고 load를 쓰고, 전체 경로를 입력하라고 하는 글이 보였다.

load로 Full path 지정

이걸로 하니 드디어 성공하였다.

이게 ARM Embedded Linux문제인건지, 원래 Linux OS 문제인건지 모르겠다.

'단편글' 카테고리의 다른 글

URI에서 IPv6 사용  (0) 2020.10.15
struct tm 을 쓸 때 하는 실수들  (0) 2020.08.21
DP 문제. 어렵다  (0) 2020.07.13
모든 조합을 구하는 문제 (순열)  (0) 2020.07.07
priority queue와 vector의 최소값  (0) 2020.07.02