如何在Android NDK中調用第三方庫檔案(.so) .

來源:互聯網
上載者:User

第一次在Android NDK的C++代碼中調用第三方so檔案時吃了點虧, 以為只用把.so檔案放到libs/armeabi目錄下即可, 沒想到一ndk-build, 該so就被刪除了, 報告連結錯誤. 通過瞭解, 發現NDK下調用.so時需要對其作PREBUILT處理, 步驟如下:

1.在project/jni目錄下建立prebuilt子目錄(目錄名可自訂).2.將第三方.so放到prebuilt中,並建立Android.mk, 內容如下:

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE := xxx

    LOCAL_SRC_FILES := libxxx.so

    include $(PREBUILT_SHARED_LIBRARY)

3.在project/jni/Android.mk中加入

    LOCAL_SHARED_LIBRARIES := xxx

4.在project/jni/android.mk的最後加入

    include $(LOCAL_PATH)/prebuilt/Android.mk

5.運行cygwin, 到project目錄下, 運行$NDK/ndk-build 靜態庫的引用

前兩天想用jni方式調用一些現成代碼,於是使用NDK編譯項目,Android.mk檔案如下:

view plainprint?
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)   
  4.   
  5. LOCAL_MODULE    := my_jni  
  6. LOCAL_SRC_FILES := my_jni.c  
  7.   
  8.   
  9. LOCAL_STATIC_LIBRARIES := libstatic  
  10.   
  11. LOCAL_LDLIBS := -llog   
  12.   
  13. include $(BUILD_SHARED_LIBRARY)  

libstatic.a是我要調用的第三方靜態庫。

但是出現了問題,提示一直找不到靜態庫中的函數,如下提示:

view plainprint?
  1. D:/WJR-WorkPlace/WorkSpace/Android/jni/my_jni.c:172: undefined reference to `_Destroy'  

其中_Destroy是第三方靜態庫提供的函數。

找了很多資料沒能解決問題,最終在同事的協助下解決問題了,原因是靜態庫連結不對,將android.mk改為

view plainprint?
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)   
  4. LOCAL_MODULE    := static  
  5. LOCAL_SRC_FILES := libstatic.a   
  6. include $(PREBUILT_STATIC_LIBRARY)  
  7.   
  8. include $(CLEAR_VARS)   
  9.   
  10. LOCAL_MODULE    := my_jni  
  11. LOCAL_SRC_FILES := my_jni.c  
  12.   
  13. LOCAL_STATIC_LIBRARIES := static  
  14.   
  15. LOCAL_LDLIBS := -llog   
  16.   
  17. include $(BUILD_SHARED_LIBRARY)  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.