簡體   English   中英

Cmake,Android:調用在預構建庫中定義的靜態函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM