C++ 在cpp中正确使用定义宏替换函数名
我在Ubuntu上使用Eclipse+高通库(cpp)+Android SDK。我的应用程序运行良好。如果我更改qualcomm库中的某些代码,它将正确编译并工作 问题是:我已经更改了项目的名称,我必须更改cpp(函数名称)中的一些代码,如果我不这样做,我会得到一个C++ 在cpp中正确使用定义宏替换函数名,c++,exception,linker,c-preprocessor,C++,Exception,Linker,C Preprocessor,我在Ubuntu上使用Eclipse+高通库(cpp)+Android SDK。我的应用程序运行良好。如果我更改qualcomm库中的某些代码,它将正确编译并工作 问题是:我已经更改了项目的名称,我必须更改cpp(函数名称)中的一些代码,如果我不这样做,我会得到一个Java.lang.unsatifiedLinkError 这是因为所有函数的名称都与Android软件包相同,如下所示: Java_org_myproject_marker_MainActivity_onQCARInitialize
Java.lang.unsatifiedLinkError
这是因为所有函数的名称都与Android软件包相同,如下所示:
Java_org_myproject_marker_MainActivity_onQCARInitializedNative(JNIEnv *, jobject)
#define MAIN_ACTIVITY_PREFIX org_myproject_marker_MainActivity
#define VISUALIZER_PREFIX org_myproject_marker_Visualizer
#define MAIN_ACTIVITY_PREFIX(n) Java_org_myproject_marker_MainActivity##n
MAIN_ACTIVITY_PREFIX(_onQCARInitializedNative)(JNIEnv *, jobject)
然后我定义一个宏,如下所示:
Java_org_myproject_marker_MainActivity_onQCARInitializedNative(JNIEnv *, jobject)
#define MAIN_ACTIVITY_PREFIX org_myproject_marker_MainActivity
#define VISUALIZER_PREFIX org_myproject_marker_Visualizer
#define MAIN_ACTIVITY_PREFIX(n) Java_org_myproject_marker_MainActivity##n
MAIN_ACTIVITY_PREFIX(_onQCARInitializedNative)(JNIEnv *, jobject)
我通过以下方式更改所有正确的功能:
Java_MAIN_ACTIVITY_PREFIX_onQCARInitializedNative(JNIEnv *, jobject)
但是我仍然得到Java.lang.UNSATISFIEDLINKERROR
异常
如果我不使用#define
宏(并写入所有行),它就可以工作,但我想用top define保存cpp代码,如果我需要在其他项目中使用它,它会自动更改所有内容
我读过。我不能在另一个文本或类似文本中替换文本吗?您正在寻找字符串连接,如下所示:
Java_org_myproject_marker_MainActivity_onQCARInitializedNative(JNIEnv *, jobject)
#define MAIN_ACTIVITY_PREFIX org_myproject_marker_MainActivity
#define VISUALIZER_PREFIX org_myproject_marker_Visualizer
#define MAIN_ACTIVITY_PREFIX(n) Java_org_myproject_marker_MainActivity##n
MAIN_ACTIVITY_PREFIX(_onQCARInitializedNative)(JNIEnv *, jobject)
然后像这样使用它:
Java_org_myproject_marker_MainActivity_onQCARInitializedNative(JNIEnv *, jobject)
#define MAIN_ACTIVITY_PREFIX org_myproject_marker_MainActivity
#define VISUALIZER_PREFIX org_myproject_marker_Visualizer
#define MAIN_ACTIVITY_PREFIX(n) Java_org_myproject_marker_MainActivity##n
MAIN_ACTIVITY_PREFIX(_onQCARInitializedNative)(JNIEnv *, jobject)
实际上,CPP宏不会在标识符的中间扩展。试一试
#define MAIN_ACTIVITY_PREFIX(func) Java_org_myproject_marker_MainActivity##func
这将为您提供一个宏,将Java\u org\u myproject\u marker\u main activity
前置到您传递给它的函数名。将其用作:
MAIN_ACTIVITY_PREFIX(_onQCARInitializedNative)(JNIEnv *, jobject) {
...
}