[英]How to include debug symbols for a pre-built native library inside an Android App Bundle?
[英]Cmake, Android: call static function defined inside a pre-built library
如何調用在預建庫(library.so)中定義/實現的靜態函數。
它的定義如下:
namespace MyNS {
class Database {
public:
static void logDB();
};
}
library.so沒有提供標頭,但是函數的簽名是已知的。
我創建了標題,並在其中添加了上面的定義,然后將其包含在源文件中,並嘗試調用該函數:
#include "Database.h"
JNIEXPORT jstring JNICALL Java_com_my_package_name_MyClass_stringFromJNI(JNIEnv *env, jobject instance) {
MyNS::Database::logDB();//compilation error
return env->NewStringUTF("test");
}
我undefined reference to MyNS::Database::logDB()'
錯誤,可能是由於缺少函數實現。
我想應該有一種方法可以將該標頭鏈接到實現該功能的庫?
這是我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.4.1)
add_library( native-lib
SHARED
src/cpp/my_src.cpp )
# Include libraries needed for hello-jni lib
target_link_libraries(native-lib
android
log)
# Specifies a path to native header files.
include_directories(src/cpp/)
#add pre-built library
add_library( library
SHARED
IMPORTED)
set_target_properties( # Specifies the target library.
library
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
/path/to/lib/library.so )
include_directories(/path/to/lib/)
您需要將導入的庫與正在構建的庫鏈接。 只需將其放在CMakeLists.txt的末尾即可:
target_link_libraries(native-lib library)
聽起來您已經正確設置了標題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.