Как прочитать константу из другого файла C ++ в Android NDK - PullRequest
0 голосов
/ 16 мая 2019

Я использую NDK в моем приложении для Android.Там не было никаких проблем.Вот код для файла C ++

#include <jni.h>
#include <string>
#include <stdio.h>


extern "C" JNIEXPORT jstring JNICALL
Java_com_examples_core_MyApplication_getKeyJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string secret_key = "mysecret";
    return env->NewStringUTF(secret_key.c_str());
}


Редактировать

Вот мой подход

my native-lib.cpp


#include <jni.h>
#include <string>
#include <unistd.h> // for getcwd()
#include <iostream>
#include <stdio.h>
#include "constants.h"

extern "C" JNIEXPORT jstring JNICALL
Java_com_examples_core_MyApplication_getKeyJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string secret_key = secret_key;
    return env->NewStringUTF(secret_key.c_str());
}


my constants.h

#pragma once

#include <string>

extern const std::string secret_key;        // declaration

my constants.cpp

#include "constants.h"

const std::string secret_key = "mysecret";  // definition

Когда яскомпилировать я получаю следующую ошибку

native-lib.cpp:13: undefined reference to `secret_key'

1 Ответ

1 голос
/ 16 мая 2019

Вы не хотите помещать определение в заголовочный файл, поскольку это может привести к нескольким определениям одной и той же переменной.

Но вы можете сделать что-то вроде этого:

constants.h

#pragma once

#include <string>

extern const std::string secret_key;        // declaration

constants.cpp

#include "constants.h"

const std::string secret_key = "mysecret";  // definition

main.cpp

#include <iostream>
#include "constants.h"

int main()
{
    std::cout << secret_key;               // usage
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...