NDK 中調用so庫函數

1、首先說明一下文件放置的目錄結構以下:shell

----jni
    | prebuild
        |libturbojpeg.so
        |libturbojpeg.h
        |prebuild.mk
    Android.mk
    Application.mk
    com_XXX_XXX_XXX.cpp
    com_XXX_XXX_XXX.h

說明:prebuild是咱們須要調用的第三方的so文件的放置的目錄,裏面還有一個prebuild.mk文件,主要是用來聲明預編譯用的.libturbojpeg.h 爲相應的頭文件。函數

其中libturbojpeg.h裏面定義函數:ui

Mat decodeJpg(...,...,...)

2、個人需求:在com_XXX_XXX_XXX.cpp中須要使用到decodeJpg,詳細以下:code

#include "prebuild/libturbojpeg.h"
void  myDecode()
{
    Mat m = decodeJpg(...);
}

3、具體說明: (1)prebuild.mk內容:io

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := turbojpeg
LOCAL_SRC_FILES := libturbojpeg.so
TARGET_PRELINK_MODULES := false
include $(PREBUILT_SHARED_LIBRARY)

(2)Android.mk內容:編譯

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=STATIC
include ../../../../sdk/native/jni/OpenCV.mk

MY_FILES_PATH  :=  $(LOCAL_PATH) \
               #   $(LOCAL_PATH)/../../Classes
			
MY_FILES_SUFFIX := %.cpp %.c %.cc

My_All_Files := $(foreach src_path,$(MY_FILES_PATH), $(shell find "$(src_path)" -type f) ) 
My_All_Files := $(My_All_Files:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)
MY_SRC_LIST  := $(filter $(MY_FILES_SUFFIX),$(My_All_Files)) 
MY_SRC_LIST  := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%)

**LOCAL_SHARED_LIBRARIES += turbojpeg**

LOCAL_SRC_FILES += $(MY_SRC_LIST)
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl
LOCAL_CFLAGS += -std=gnu++11

LOCAL_MODULE     := LPR

include $(BUILD_SHARED_LIBRARY)1. 這裏是列表文本
**include $(LOCAL_PATH)/prebuild/prebuild.mk**

注:加粗部分是須要加載第三方so庫須要的mk腳本foreach

(3)ndk-build 作好上面的工做了以後就能夠執行NDK編譯了sdk

相關文章
相關標籤/搜索