首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JNI,无法运行ndk-build

JNI,无法运行ndk-build
EN

Stack Overflow用户
提问于 2012-10-10 15:05:45
回答 1查看 645关注 0票数 2

我正在尝试运行一个用C++编写的简单的factorial程序,并将其链接到java UI。

这是我的Java代码

代码语言:javascript
复制
package com.lan.factorial;

public class FacLib
{

    public native static long fac(long n);
    static 
    {
        System.loadLibrary("FacLib");
    }
    public static long facI(long n)
    {
        return fac(n);
    }
}

`

这是我的C++代码

代码语言:javascript
复制
#include <studio.h>
#include <jni.h>
#include "com_lan_factorial_FacLib.h"
JNIEXPORT jlong JNICALL Java_com_lan_factorial_FacLib_fac(JNIEnv *env, jclass, jlong)
{

    jlong f = 1;
    jlong i;
    for(i = 1; i <= n; i++)
    {
         f *= i;
    }
    return f;
}

这是我的make文件

代码语言:javascript
复制
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := com_lan_factorial_main.cpp

LOCAL_MODULE := com_lan_factorial_FacLib
include $(BUILD_SHARED_LIBRARY)

当我运行ndk-build时,我一直收到这个错误:

代码语言:javascript
复制
C:\Users\Lan\workspace\Factorial>"..\..\temp\android\android-ndk-r8b\ndk-build"
make: *** No rule to make target `jni/com_lan_factorial_main.cpp', needed by `obj/local/armeabi/objs/com_lan_factorial_FacLib/com_lan_factorial_main.o'.  Stop.

是的,我的NDK在不同的文件夹中,所以我必须使用..\..\,但我不认为这是问题所在。我确实运行了javah

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-10 15:59:26

正如@nneonneo正确指出的那样,您的.cpp文件名在Android.mk中没有正确列出。

现在,您在第4行遇到了一个编译问题:

代码语言:javascript
复制
JNIEXPORT jlong JNICALL Java_com_lan_factorial_FacLib_fac(JNIEnv *env, jclass, jlong)
                                                                                    ^

您丢失了参数名称n,但您可以在第9行中使用它:

代码语言:javascript
复制
    for(i = 1; i <= n; i++)

请注意,可以跳过jclass类型的第二个参数的名称,因为您从未使用过它。

我不确定您的编译器是否找到了com_lan_factorial_FacLib.h文件,但这不是问题:您可以完全删除此#include语句,因为您的代码不会使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12813788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档