如何调用在预构建的库(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/)
答案 0 :(得分:0)
您需要将导入的库与正在构建的库链接起来。只需将它放在CMakeLists.txt的末尾:
target_link_libraries(native-lib library)
听起来你已经正确设置了标题。