java - JNI怎么链接已经写好的C++编写的动态库文件.so
ringa_lee
ringa_lee 2017-04-18 10:28:03
0
1
369

JNI怎么链接已经写好的C++编写的动态库文件.so

ringa_lee
ringa_lee

ringa_lee

membalas semua(1)
洪涛

Ambil CMake sebagai contoh:

Memandangkan perpustakaan yang diprakompil sudah dibina, anda perlu menggunakan bendera IMPORTED untuk memberitahu CMake bahawa anda hanya perlu mengimportnya ke dalam projek anda:

add_library( imported-lib
             SHARED
             IMPORTED )

Kemudian anda perlu menggunakan perintah set_target_properties() untuk menentukan laluan ke pustaka, seperti kod di bawah.

set_target_properties( # Specifies the target library.
                       imported-lib
                       # Specifies the parameter you want to define.
                       PROPERTIES IMPORTED_LOCATION
                       # Provides the path to the library you want to import.
                       imported-lib/src/${ANDROID_ABI}/libimported-lib.so )

Untuk membolehkan CMake mencari fail pengepala anda semasa penyusunan, anda perlu menggunakan perintah include_directories() dan menghantar alamat fail pengepala anda dalam:

include_directories( imported-lib/include/ )

Gunakan perintah target_link_libraries() dalam skrip binaan CMake untuk mengaitkan perpustakaan prabina dengan pustaka tempatan anda:

target_link_libraries( native-lib imported-lib app-glue ${log-lib} )

Apabila anda membina APP anda, Gradle akan membungkus perpustakaan yang diimport secara automatik ke dalam APK anda. Anda boleh menggunakan Penganalisis APK untuk menyemak.

Tetapi jika anda boleh mendapatkan kod sumber, saya tidak mengesyorkan anda memautkan .so, kerana ia mungkin tidak serasi dengan platform tertentu. Contohnya, pustaka .so dynamic yang disusun pada platform Linux tidak boleh dijalankan pada platform lengan (seperti Android).

Rujukan:

  • Bergembiralah menggunakan C/C++ dalam Android Studio 2.2

  • Penempatan semula dalam ELF generik (EM: 62) Penyelesaian salah

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan