Как исправить ошибку undefined reference to

504
13 мая 2017, 21:04

Мне нужно использовать готовый C++ класс Catalog. Используя статью сделал начальную настройку проекта. MainActivity:

public class MainActivity extends AppCompatActivity {
    static {
        System.loadLibrary("native-lib");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.sample_text);
        tv.setText("C++ bool = " + getTestBool());
    }
    public native boolean getTestBool();
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.4.1)
add_library(
             native-lib
             SHARED
             native-lib.cpp )
add_library(
             catalog
             SHARED
             catalog.cpp )
find_library(
              log-lib
              log )
target_link_libraries(
                       native-lib
                       ${log-lib} )
target_link_libraries(
                       catalog
                       ${log-lib} )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

native-lib.cpp:

#include <android/log.h>
#include <jni.h>
#include <string>
#include "string.h"
#include "catalog.h"
extern "C"//При експорте функций имена их не будут изменятся
JNIEXPORT jboolean JNICALL
Java_ru_artem_ndktest2_MainActivity_getTestBool(
        JNIEnv *env, //указатель на объект, представляющий из себя JNI-окружение
        jobject) { //класс, которому принадлежит объявление нативного метода в Java. Фактически это this)
    Catalog cat;
    return cat.getResult();
}

catalog.h:

#ifndef DBADAPTER_H
#define DBADAPTER_H
#include <list>
#include <set>
#include <map>
#include <unordered_map>
#define DISABLE_SEARCH_BY_WORD
class Catalog
{
    public : //slots
        bool getResult();
};

#endif // DBADAPTER_H

catalog.cpp:

#include "catalog.h"
using namespace std;
bool Catalog::getResult() {
    return true;
}

Но получаю ошибку при вызове метода find:

Error:(27) undefined reference to `Catalog::getResult()'

Как её исправить? Ссылка на весь мини проект.

UPD Упростил и добавил дополнительный код

Answer 1

Не знаю на сколько верно я сделал, но все файлы отлично подключились следующей командой в CMakeList:

add_library(
             native-lib
             SHARED
             native-lib.cpp classes/catalog.cpp headers/catalog.h)
READ ALSO
Как перевернуть на 180 градусов RGB в буфере?

Как перевернуть на 180 градусов RGB в буфере?

Некоторые веб-камеры снимают в перевёрнутом режимеВ программе нужно переворачивать такие камеры

302
Как закрыть одно всплывающее окно, а затем открыть другое на js [требует правки]

Как закрыть одно всплывающее окно, а затем открыть другое на js [требует правки]

Наведите пожалуйста на материалы или подскажите какие изучить функцииНужно после клика по кнопке одно всплывающее окно закрыть и открыть...

247
LocalStorage начальный значения

LocalStorage начальный значения

Использую local storage для сохранения игры, cобираюсь сохранить массив, но ему нужны начальные значения неравные нулю, как осуществить?

232