当前位置: 首页 > 知识库问答 >
问题:

Android-与JNI有关的问题

锺离森
2023-03-14
static void convert(unsigned int &c, const float &temp1, const float &temp2, const float &temp3) {
    if ( (temp3 * 6) < 1) c = (unsigned int) ((temp2 + (temp1 - temp2) * 6 * temp3) * 100);

    else if ((temp3 * 2) < 1) c = (unsigned int) (temp1 * 100);

    else if ((temp3 * 3) < 2) c = (unsigned int) ((temp2 + (temp1 - temp2) * (.66666 - temp3) * 6) * 100);

    else c = (unsigned int) (temp2 * 100);

    return;
}
convert(r, temp1, temp2, temp3);

但是,当我使用命令行中的ndk-build命令编译它时,会出现以下错误:

Android NDK:APP_PLATFORM未设置。默认为最小支持版本Android-16。[arm64-v8a]编译:com_celik_abdullah_imageprocessingpart_processors_NativeImageProcessor<=com_celik_Abdullah_ImageProcessPart_ProcessPart_NativeImageProcessor.c jni/com_celik_Abdullah_ImageProcessPart_ProcessPart_NativeImageProcessor.c jni/com_celik_Abdullah_ImageProcessingPart_ProcessPart_ProcessPart_NativeImageProcessor.c const float&temp1,const float...^JNI/com_celik_abdullah_imageprocessingpart_processors_NativeImageProcessor.c:193:47:错误:参数名称省略静态空转换(无符号int&c,const float&temp1,const float...^JNI/com_celik_abdullah_imageprocessingpart_processors_NativeImageProcessor.c:194:11:如果((temp3*6)<1)c=(无符号int)_NativeimagEprocessor.c:194:27:错误:如果((temp3*6)<1)c=(无符号int)((temp2+(Temp1-Temp2)*6*temp3...^JNI/COM_CELIK_ABDULLAH_ImageProcessingPart_Processors_NativeImageProcessor.c:194:57:错误:如果((temp3*6)<1)c=(无符号int)((temp2+(Temp1-Temp2)*6*temp3...^JNI/COM_Celik_Abdullah_ImageProcessingPart_Processors_NativeImageProcessor.c:194:65:错误:未声明标识符'temp2'的使用如果((temp3*6)<1)c=(无符号int)((temp2+(Temp1-Temp2)*6*temp3)*...^JNI/COM_Celik_Abdullah_ImageProcessingPart_Processors_NativeImageProcessor.c:194:48:错误:未声明标识符'temp2'的使用如果((temp3*6)<1)c=(无符号^jni/com_celik_abdullah_imageprocessingpart_processors_nativeimageProcessor.c:194:78:错误:使用未声明的标识符'temp3'...(temp3*6)<1)c=(无符号int)((temp2+(Temp1-temp2)*6*temp3)*100);^jni/com_celik_abdullah_imageprocessingpart_processors_nativeimageProcessor.c:196:15:错误:使用未声明的标识符'temp3'否则,如果((temp3*2)<1)c=(无符号int)(temp1*100);^jni/com_celik_abdullah_imageprocessingpart_processors_nativeimageprocessor.c:196:31:错误:使用未声明的标识符“c”否则,如果((temp3*2)<1)c=(无符号int)(temp1*100);^jni/com_celik_abdullah_imageprocessingpart_processors_nativeimageprocessor.c:196:51:错误:使用未声明的标识符'temp1'否则,如果((temp3*2)<1)c=(无符号int)(temp1*100);^JNI/COM_Celik_Abdullah_ImageProcessingPart_Processors_NativeImageProcessor.c:198:15:错误:使用未声明的标识符'temp3'否则如果((temp3*3)<2)c=(无符号int)((temp2+(Temp1-Temp2)*(.666..)^JNI/COM_CELIK_ABDULLAH_ImageProcessingPart_Processors_NativeImageProcessor.c:198:31:错误:使用未声明的标识符“c”否则,如果((temp3*3)<2)c=(无符号int)((temp2+(Temp1-Temp2)*(.666..)^JNI/COM_Celik_Abdullah_ImageProcessingPart_Processors_NativeImageProcessor.c:198:61:错误:使用未声明的标识符'temp1'否则如果((temp3*3)<2)c=(无符号int)((temp2+(Temp1-Temp2)*(.666...^JNI/COM_Celik_Abdullah_ImageProcessingPart_Processors_NativeImageProcessor.c:198:69:错误:使用未声明的标识符“temp2”...如果((temp3*3)<2)c=(无符号int)((temp2+(Temp1-Temp2)*(.66666-temp.)^JNI/COM_Celik_Abdullah_ImageProcessingPart_Processors_NativeImageProcessor.c:198:52:错误:使用未声明的标识符'temp2'否则((temp3*3)<2)c=(无符号int)((temp2+(Temp1-Temp2)*(.666...^JNI/COM_Celik_Abdullah_ImageProcessingPart_Processors_NativeImageProcessor.c:198:88:错误:使用未声明的标识符'temp3'...<2)c=(无符号H_ImageProcessingPart_Processors_NativeImageProcessor.c:200:10:错误:使用未声明的标识符'c'else c=(无符号int)(temp2*100);^JNI/com_celik_Abdullah_ImageProcessingPart_Processors_NativeImageProcessor.c:200:30:错误:使用未声明的标识符'temp2'else c=(无符号int)(temp2*100);

我从一个。cpp文件中得到了代码。当我删除签名中的地址运算符(&)时,一切都很好(没有错误),但我不知道算法是否会工作。

有人能帮忙吗?

共有1个答案

姬昀
2023-03-14

您试图用C编译器编译C++代码,但这是行不通的。

显而易见的解决方案是使用C++编译器编译它(例如,通过为源文件提供.cpp扩展名)。

如果出于某种原因必须使用C编译器,那么必须用C重写函数。
首先,可以通过值而不是引用传递所有const float参数(通过去掉&)。我不知道为什么它们首先是引用。
第一个参数(C)被用作输出参数,结果被写入其中。因此,必须将它从引用更改为指针(即无符号int*c)。或者更好的方法是跳过输出参数,让函数返回它的结果:

static int convert(const float temp1, const float temp2, const float temp3) {
    unsigned int c;

    if ( (temp3 * 6) < 1) c = (unsigned int) ((temp2 + (temp1 - temp2) * 6 * temp3) * 100);
    else if ((temp3 * 2) < 1) c = (unsigned int) (temp1 * 100);
    else if ((temp3 * 3) < 2) c = (unsigned int) ((temp2 + (temp1 - temp2) * (.66666 - temp3) * 6) * 100);
    else c = (unsigned int) (temp2 * 100);

    return c;
}
r = convert(temp1, temp2, temp3);
 类似资料:
  • 我遇到了一个家庭作业的麻烦,创建一个调用另一个类的方法的类。给我们下一课: 然后给出以下提示: 实现一个类Portfolio。这个类有两个对象,checking和savings,类型为BankAccount。实现四种方法: 公用无效存款(双倍金额,字符串帐户) 公开无效提取(双倍金额,字符串帐户) 公有作废转账(双倍金额,字符串账户) 公共双getBalance(字符串帐户) 这里的帐户字符串是“

  • 用户连接RADIUS客户端; RADIUS客户端又连接到RADIUS服务器。如果客户端似乎无法与服务器连接,请首先检查以下内容: FreeRADIUS知道这个客户吗?检查FreeRADIUS日志文件中的以下行: Wed May 18 17:53:57 2012 : Error: Ignoring request to authentication address * port 1812 from

  • 我在Mac上安装了Android studio 3.3.2。由于错误,我删除了位于Library/Android/sdk上的sdk文件夹。现在我已经卸载了android studio并重新安装了它,但现在它不再下载android sdk,又指向了老路,后来它给我的错误就像没事做一样!Android SDK是最新的。SDK工具目录丢失 请帮我解决这个问题。

  • 问题内容: 我有一个代码, 我使用运行时锁定-解锁,因为我不希望例程1的打印与例程2混合使用。但是,执行上述代码后,其输出与没有锁定- 解锁的输出相同(意味着打印输出混合在一起)。谁能帮助我为什么这件事发生以及如何迫使这件事发生。 注意:我举了一个打印示例,但是有很多打印和发送事件。 问题答案: 如果您要 序列化 “打印某物”,例如,每个“打印某物”应自动执行,则只需对其进行 序列化即可 。 您可

  • 资源结构 webcontent/resources/img/logo.png

  • 问题内容: 我看到了这个问题, 所以我对此问题有一个疑问:在以下查询中,在相同日期我得到的结果是不同的。 按列输出: 请帮助我,在此先谢谢。 编辑 我写了一个简单的过程,通过它可以找到下面给出的日期: EXEC simple_test(sysdate); EXEC simple_test(‘01 -JAN-2013’); 为什么会这样? 问题答案: 我想解释一下为什么您会得到不同的结果。 看到这个