Android 未定义的引用
Android Undefined Reference
我在编译时收到此错误:
error: undefined reference to 'Android::os::Build::VERSION::cls'
我正在减慢实现 jni 方法以通过 cpp 访问 java 代码的速度。我做了很多挖掘工作,试图找到我的具体问题,但没有解决方案。发布了许多未定义的引用错误,但 none 与我的错误有关(如果我错了请纠正我)。我正在尝试在 class 中创建子 classes。如果有人能解释我的代码有什么问题,将不胜感激。代码如下。
//
// Created by Jaime on 12/14/2019.
//
#ifndef MENUUPDATED_ANDROID_HPP
#define MENUUPDATED_ANDROID_HPP
class Android {
public: class os {
public: class Build {
public: class VERSION {
public: static jclass cls;
public: static jfieldID SDK_INT;
}; static VERSION VERSION;
public: class VERSION_CODES {
public: const static int BASE = 1;
public: const static int BASE_1_1 = 2;
public: const static int CUPCAKE = 3;
public: const static int CUR_DEVELOPMENT = 10000;
public: const static int DONUT = 4;
public: const static int ECLAIR = 5;
public: const static int ECLAIR_0_1 = 6;
public: const static int ECLAIR_MR1 = 7;
public: const static int FROYO = 8;
public: const static int GINGERBREAD = 9;
public: const static int GINGERBREAD_MR1 = 10;
public: const static int HONEYCOMB = 11;
public: const static int HONEYCOMB_MR1 = 12;
public: const static int HONEYCOMB_MR2 = 13;
public: const static int ICE_CREAM_SANDWICH = 14;
public: const static int ICE_CREAM_SANDWICH_MR1 = 15;
public: const static int JELLY_BEAN = 16;
public: const static int JELLY_BEAN_MR1 = 17;
public: const static int JELLY_BEAN_MR2 = 18;
public: const static int KITKAT = 19;
public: const static int KITKAT_WATCH = 20;
public: const static int LOLLIPOP = 21;
public: const static int LOLLIPOP_MR1 = 22;
public: const static int M = 23;
public: const static int N = 24;
public: const static int N_MR1 = 25;
public: const static int O = 26;
public: const static int O_MR1 = 27;
public: const static int P = 28;
public: const static int Q = 29;
}; static VERSION_CODES VERSION_CODES;
}; static Build Build;
}; static os os;
public: static void initVariables(){
os.Build.VERSION.cls = globalEnv->FindClass(/*android/os/Build$VERSION*/XorStr<0xBA,25,0xDBDC734C>("\xDB\xD5\xD8\xCF\xD1\xD6\xA4\xEE\xAD\xB0\xEB\x87\xB3\xAE\xA4\xAD\xEE\x9D\x89\x9F\x9D\x86\x9F\x9F"+0xDBDC734C).s);
os.Build.VERSION.SDK_INT = globalEnv->GetStaticFieldID(os.Build.VERSION.cls, /*SDK_INT*/XorStr<0xF3,8,0x0C126D72>("\xA0\xB0\xBE\xA9\xBE\xB6\xAD"+0x0C126D72).s,
/*I*/XorStr<0x6F,2,0xF1B188D5>("\x26"+0xF1B188D5).s);
}
public: static int receiveOverlayType(){
jint buildNumber = globalEnv->GetStaticIntField(os.Build.VERSION.cls, os.Build.VERSION.SDK_INT);
if(buildNumber >= os.Build.VERSION_CODES.O) return WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
return WindowManager.LayoutParams.TYPE_PHONE;
}
}; static Android Android;
#endif //MENUUPDATED_ANDROID_HPP
你的public: static jclass cls;
是声明,不是定义。
如果您在 C++17 模式下编译,您可以将其更改为
public: inline static jclass cls;
或在您的代码中添加定义:(在 Android
class 之外!)
jclass Android::os::Build::VERSION::cls;
我在编译时收到此错误:
error: undefined reference to 'Android::os::Build::VERSION::cls'
我正在减慢实现 jni 方法以通过 cpp 访问 java 代码的速度。我做了很多挖掘工作,试图找到我的具体问题,但没有解决方案。发布了许多未定义的引用错误,但 none 与我的错误有关(如果我错了请纠正我)。我正在尝试在 class 中创建子 classes。如果有人能解释我的代码有什么问题,将不胜感激。代码如下。
//
// Created by Jaime on 12/14/2019.
//
#ifndef MENUUPDATED_ANDROID_HPP
#define MENUUPDATED_ANDROID_HPP
class Android {
public: class os {
public: class Build {
public: class VERSION {
public: static jclass cls;
public: static jfieldID SDK_INT;
}; static VERSION VERSION;
public: class VERSION_CODES {
public: const static int BASE = 1;
public: const static int BASE_1_1 = 2;
public: const static int CUPCAKE = 3;
public: const static int CUR_DEVELOPMENT = 10000;
public: const static int DONUT = 4;
public: const static int ECLAIR = 5;
public: const static int ECLAIR_0_1 = 6;
public: const static int ECLAIR_MR1 = 7;
public: const static int FROYO = 8;
public: const static int GINGERBREAD = 9;
public: const static int GINGERBREAD_MR1 = 10;
public: const static int HONEYCOMB = 11;
public: const static int HONEYCOMB_MR1 = 12;
public: const static int HONEYCOMB_MR2 = 13;
public: const static int ICE_CREAM_SANDWICH = 14;
public: const static int ICE_CREAM_SANDWICH_MR1 = 15;
public: const static int JELLY_BEAN = 16;
public: const static int JELLY_BEAN_MR1 = 17;
public: const static int JELLY_BEAN_MR2 = 18;
public: const static int KITKAT = 19;
public: const static int KITKAT_WATCH = 20;
public: const static int LOLLIPOP = 21;
public: const static int LOLLIPOP_MR1 = 22;
public: const static int M = 23;
public: const static int N = 24;
public: const static int N_MR1 = 25;
public: const static int O = 26;
public: const static int O_MR1 = 27;
public: const static int P = 28;
public: const static int Q = 29;
}; static VERSION_CODES VERSION_CODES;
}; static Build Build;
}; static os os;
public: static void initVariables(){
os.Build.VERSION.cls = globalEnv->FindClass(/*android/os/Build$VERSION*/XorStr<0xBA,25,0xDBDC734C>("\xDB\xD5\xD8\xCF\xD1\xD6\xA4\xEE\xAD\xB0\xEB\x87\xB3\xAE\xA4\xAD\xEE\x9D\x89\x9F\x9D\x86\x9F\x9F"+0xDBDC734C).s);
os.Build.VERSION.SDK_INT = globalEnv->GetStaticFieldID(os.Build.VERSION.cls, /*SDK_INT*/XorStr<0xF3,8,0x0C126D72>("\xA0\xB0\xBE\xA9\xBE\xB6\xAD"+0x0C126D72).s,
/*I*/XorStr<0x6F,2,0xF1B188D5>("\x26"+0xF1B188D5).s);
}
public: static int receiveOverlayType(){
jint buildNumber = globalEnv->GetStaticIntField(os.Build.VERSION.cls, os.Build.VERSION.SDK_INT);
if(buildNumber >= os.Build.VERSION_CODES.O) return WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
return WindowManager.LayoutParams.TYPE_PHONE;
}
}; static Android Android;
#endif //MENUUPDATED_ANDROID_HPP
你的public: static jclass cls;
是声明,不是定义。
如果您在 C++17 模式下编译,您可以将其更改为
public: inline static jclass cls;
或在您的代码中添加定义:(在 Android
class 之外!)
jclass Android::os::Build::VERSION::cls;