如何从Android NDK中的另一个C ++文件读取常量

时间:2019-05-16 09:44:27

标签: android c++ android-ndk

我在Android应用程序中使用NDK。没问题。这是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());
}


修改

这是我的方法

我的 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());
}


我的 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

编译时出现以下错误

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

1 个答案:

答案 0 :(得分:1)

您不想将定义放在头文件中,因为这可能导致同一变量的多个定义。

但是您可以执行以下操作:

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
}