Это не связано с вопросом, но $ (GPP) звучит как C PreProcessor. Я думаю, что лучше использовать "CC = gcc" и "CXX = g ++"
уйста, помогите, я ищу бросить весь интернет, но я не могу найти ответ ...
Слой СЯ создал простую функциюint mean(int, int);
и поместите его вcalc_mean.h и инициализировать его вcalc_mean.c вот эти два файла.
#include "calc_mean.h"
int mean(int a, int b)
{
return (a+b) / 2;
}
calc_mean.hint mean(int, int);
Затем я создаю make-файл и создаю архивный (.a) файл с именем Test_Archive.a, используя следующий make-файл
MakefileGCC := C:\Tools\ndk-toolchain\ndk-standalone\bin\arm-linux-androideabi-gcc.exe
GPP := C:\Tools\ndk-toolchain\ndk-standalone\bin\arm-linux-androideabi-g++.exe
AR := C:\Tools\ndk-toolchain\ndk-standalone\bin\arm-linux-androideabi-ar.exe
default: all
all: obj
$(AR) r Test_Archive.a *.o
obj:
$(GPP) -c *.c
я получилTest_Archive.a архивный файл. Теперь я хочу добавить этот архивный файл в JNI и вызватьmean
функция из моего проекта JNI, для этого я создал файлы JNI и Java, которые вы можете увидеть ниже.
Как вы можете видеть здесь, в слое Java у меня есть TestJavaClass, который имеет один нативный метод с именемJMean
этот метод имеет дваint
аргументы и возвращение такжеint
.
public class TestJavaClass
{
/** Default Constructor
*
*/
public TestJavaClass( ) {
}
/** Test Function.
*
* @param a
* @param b
* @return
*/
public native int JMean( int a, int b);
}
Слой JNIЭто заголовочный файл JNI
Test_Library.h/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_Fido_OSTXLib_OSTX */
#ifndef _Included_com_Fido_OSTXLib_OSTX
#define _Included_com_Fido_OSTXLib_OSTX
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_Fido_OSTXLib_OSTX
* Method: JMean
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_Fido_OSTXLib_OSTX_JMean
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
Test_Library.c#include "Test_Library.h"
#include "calc_mean.h"
JNIEXPORT jint JNICALL Java_com_Fido_OSTXLib_OSTX_JMean( JNIEnv* env, jobject thiz, jint a, jint b )
{
return mean( a, b );
}
Я положил это два файлаTest_Library.h, Test_Library.c а такжеcalc_mean.h, Test_Archive.a и создать файл makeAndroid.mk
Android.mkLOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Test_Library
LOCAL_SRC_FILES := Test_Library.c
LOCAL_LDLIBS := -LTest_Archive.a
include $(BUILD_SHARED_LIBRARY)
но когда я хочу создать .so файл, возникает следующая ошибка, почему?
$ ../../ndk-build Скомпилировать большой палец: Test_Library <= Test_Library.c SharedLibrary: libTest_Library.so C: / cygwin / home / android-ndk-r5b / Fido / ProjectOSTX / obj / local / armeabi / objs / OSTX_Library /OSTX_Library.o: в функцииJava_com_Fido_OSTXLib_OSTX_JMean': C:/cygwin/home/android-ndk-r5b/Fido/ProjectOSTX/jni/OSTX_Library.c:6: undefined reference to
mean 'collect2: ld вернул 1 статус выхода make:* [/home/android-ndk-r5b/Fido/ProjectOSTX/obj/local/armeabi/libOSTX_Library.so] Ошибка 1