2

C ++で記述された単純な階乗プログラムを実行し、それをJavaUIにリンクしようとしています。

これは私のJavaコードです

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++コードです

#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;
}

これは私のメイクファイルです

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を実行すると、このエラーが発生し続けます。

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

4

1 に答える 1

0

@nneonneoが正しく指摘したように、ファイル名の名前.cppが に正しくリストされていませんでしたAndroid.mk

これで、4 行目にコンパイルの問題があります。

JNIEXPORT jlong JNICALL Java_com_lan_factorial_FacLib_fac(JNIEnv *env, jclass, jlong)
                                                                                    ^

パラメータ名nを失いましたが、9 行目で使用しています。

    for(i = 1; i <= n; i++)

jclass決して使用しない型の 2 番目のパラメーターの名前をスキップしても問題ないことに注意してください。

コンパイラがcom_lan_factorial_FacLib.hファイルを見つけたかどうかはわかりませんが、それは問題ではありません。この#includeステートメントを完全に削除できます。コードはそれを使用しません。

于 2012-10-10T07:59:25.600 に答える