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

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

ringa_lee
ringa_lee

ringa_lee

全部回覆 (1)
洪涛

以 CMake 為例:

由於預編譯函式庫是已經建置好的,你想就要使用 IMPORTED 標誌去告訴 CMake ,你只需要將其導入到你的專案中即可:

add_library( imported-lib SHARED IMPORTED )

然後你需要使用set_target_properties()指令去指定函式庫的路徑,就像下面的程式碼一樣。

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 )

為了讓 CMake 在編譯期間能找到你的頭文件,你需要使用 include_directories() 指令,並且將你的頭文件地址傳進去:

include_directories( imported-lib/include/ )

在 CMake 建置腳本中使用target_link_libraries()指令,將預先建置庫與你本機程式庫相關聯:

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

當你建立你的 APP 的時候,Gradle 會自動將匯入的函式庫打包到你的 APK 中。你可以使用 APK Analyzer 來檢查。

但是如果能得到源碼的話,我不推薦你鏈接.so,因為可能會與特定平台不相容。如在Linux平台上編譯的.so動態函式庫在 arm 平台(如 Android)上無法運作。

參考:

  • 在 Android Studio 2.2 中愉快地使用 C/C++

  • Relocations in generic ELF (EM: 62) 錯誤的解決方案

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!