Android студийная сборка не определена ссылка на вопрос - PullRequest
2 голосов
/ 20 февраля 2020

Итак, я хочу создать приложение android и включить предварительно скомпилированный cpp lib.

мой cpp файл: test1. cpp

#include <iostream>
using namespace std;
int add_numbers(int a,int b){
return a+b;}

заголовочный файл : test1.hpp

extern int add_numbers(int a,int b);

я построил их с помощью команды:

g++ -c test1.cpp -o test1.so

теперь в android studio я создаю новое приложение на C ++ и в CMakeLists.txt я добавил эти строки

add_library(test1 SHARED IMPORTED)
set_target_properties(test1 PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/../../..//libs/test1.so)
target_link_libraries( # Specifies the target library.
        native-lib
        # Links the target library to the log library
        # included in the NDK.
        test1 ${log-lib})

и отредактировал мой native-lib. cpp в:

#include <jni.h>
#include <string>
#include "test1.hpp"

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_cryptotrading_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    int x = 0;
    x = add_numbers(2,3);//------------------------calling here**************
    return env->NewStringUTF(hello.c_str());
}

build.gradle:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"
    defaultConfig {
        applicationId "com.example.cryptotrading"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags ""
            }

        }


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
        sourceSets {
            main {
                jniLibs.srcDirs 'libs/', 'app/libs/', '${CMAKE_SOURCE_DIR}/../../..//libs/'
            }
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs 'libs/', 'app/libs/', '${CMAKE_SOURCE_DIR}/../../..//libs/'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}

при сборке этого приложения, оно дает мне ошибка:

error: undefined reference to 'add_numbers(int, int)'

я дал ndk r21 местоположение в свойствах проекта.

Примечание: это мое первое приложение, ребята.

...