MacOs Arm64 maven build 오류 해결
Java 에서 VAD (Voice Activity Detector)을 사용하려고 하는데 자바에는 VAD를 사용할 마땅한 라이브러리가 없다. 때문에 WebRTC의 VAD를 래핑해서 사용해야하며, https://github.com/jitsi/jitsi-webrtc-vad-wrapper 에 좋은 라이브러리가 존재한다.
위의 라이브러리는 맥OS에서 빌드를 한게 아니라서 따로 클론을 받아 빌드를 해 사용하려고한다.
1.Library/Caches/JNA/temp/jna7333904895487054757.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64e' or 'arm64')
즉, 사용하는 라이브러리 어딘가에서 arm64를 지원하고 있지 않다는 말이다.
해결
https://github.com/naver/ngrinder/issues/893 , https://stackoverflow.com/questions/71252965/java-lang-unsatisfiedlinkerror-when-starting-the-play-project
위의 해결 방안을 보면, JNA 특정 버전은 arm64를 지원하지 않아 발생하는 문제였다. 내가 사용하려는 라이브러리 역시 jna-5.5.0을 사용하고 있어 5.12.0으로 변경하여 해결했다.
pom.xml
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.12.1</version>
</dependency>
2. UnsatisfiedLink no fvad in java.library.path: /Users/{name}/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:
JNIUtils.loadLibrary("fvad", WebRTCVad.class);
JNIUtils.loadLibrary("webrtcvadwrapper", WebRTCVad.class);
빌드전 테스트코드를 돌려 객체 생성 가능 여부를 확인하는데, 객체 생성 단계에서 fvad를 찾지 못하고 있었다. 맥 OS이므로 libfvad.dylib(prefix로 lib을 붙이는 네이밍 규칙이 있음) 을 찾는데, 이때 해당 라이브러리가 path로 지정된 경로에 있어야 한다. 그렇지 않으면 -Djava.library.path를 통해 라이브러리가 있는 곳을 알려주어야 한다.
해결
intelliJ 같은 경우 아래처럼 라이브러리 경로를 추가해놓으면 자동으로 -Djava.library.path 으로 설정된 경로가 들어간다.
그러나 위의 방법은 빌드 할때 실행되는 테스트코드에는 적용이 안되기 때문에, maven-surefire-plugin 을 사용하는 경우 아래와 같이 설정해준다. https://stackoverflow.com/questions/35366035/set-java-library-path-for-testing
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<argLine>
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
-Djava.library.path=/Users/{name}/jitsi-webrtc-vad-wrapper/lib/native/arm64
</argLine>
</configuration>
</plugin>