JNI怎么链接已经写好的C++编写的动态库文件.so
ringa_lee
CMake를 예로 들어보겠습니다.
미리 컴파일된 라이브러리가 이미 빌드되었으므로 IMPORTED 플래그를 사용하여 CMake에게 해당 라이브러리를 프로젝트로 가져와야 함을 알려야 합니다.
그런 다음 아래 코드와 같이 set_target_properties() 명령을 사용하여 라이브러리 경로를 지정해야 합니다.
set_target_properties()
CMake가 컴파일 중에 헤더 파일을 찾으려면 include_directories() 명령을 사용하고 헤더 파일 주소를 다음 위치에 전달해야 합니다.
CMake 빌드 스크립트에서 target_link_libraries() 명령을 사용하여 사전 빌드된 라이브러리를 로컬 라이브러리와 연결합니다.
target_link_libraries()
APP를 빌드하면 Gradle은 가져온 라이브러리를 APK에 자동으로 패키징합니다. APK 분석기를 사용하여 확인할 수 있습니다.
하지만 소스 코드를 얻을 수 있다면 .so를 링크하는 것은 특정 플랫폼과 호환되지 않을 수 있으므로 권장하지 않습니다. 예를 들어 Linux 플랫폼에서 컴파일된 .so 동적 라이브러리는 arm 플랫폼(예: Android)에서 실행할 수 없습니다.
참고:
Android Studio 2.2에서 C/C++를 사용해 보세요
일반 ELF에서 재배치(EM: 62) 잘못된 해결 방법
CMake를 예로 들어보겠습니다.
미리 컴파일된 라이브러리가 이미 빌드되었으므로 IMPORTED 플래그를 사용하여 CMake에게 해당 라이브러리를 프로젝트로 가져와야 함을 알려야 합니다.
으아악그런 다음 아래 코드와 같이
으아악set_target_properties()
명령을 사용하여 라이브러리 경로를 지정해야 합니다.CMake가 컴파일 중에 헤더 파일을 찾으려면 include_directories() 명령을 사용하고 헤더 파일 주소를 다음 위치에 전달해야 합니다.
으아악CMake 빌드 스크립트에서
으아악target_link_libraries()
명령을 사용하여 사전 빌드된 라이브러리를 로컬 라이브러리와 연결합니다.APP를 빌드하면 Gradle은 가져온 라이브러리를 APK에 자동으로 패키징합니다. APK 분석기를 사용하여 확인할 수 있습니다.
하지만 소스 코드를 얻을 수 있다면 .so를 링크하는 것은 특정 플랫폼과 호환되지 않을 수 있으므로 권장하지 않습니다. 예를 들어 Linux 플랫폼에서 컴파일된 .so 동적 라이브러리는 arm 플랫폼(예: Android)에서 실행할 수 없습니다.
참고:
Android Studio 2.2에서 C/C++를 사용해 보세요
일반 ELF에서 재배치(EM: 62) 잘못된 해결 방법