Это не связано с вопросом, но $ (GPP) звучит как C PreProcessor. Я думаю, что лучше использовать "CC = gcc" и "CXX = g ++"

уйста, помогите, я ищу бросить весь интернет, но я не могу найти ответ ...

Слой С

Я создал простую функциюint mean(int, int); и поместите его вcalc_mean.h и инициализировать его вcalc_mean.c вот эти два файла.

calc_mean.c
#include "calc_mean.h"

int mean(int a, int b)  
{  
return (a+b) / 2;  
}  
calc_mean.h
int mean(int, int);

Затем я создаю make-файл и создаю архивный (.a) файл с именем Test_Archive.a, используя следующий make-файл

Makefile
GCC := 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 Layer

Как вы можете видеть здесь, в слое 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.mk
LOCAL_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 tomean 'collect2: ld вернул 1 статус выхода make:* [/home/android-ndk-r5b/Fido/ProjectOSTX/obj/local/armeabi/libOSTX_Library.so] Ошибка 1

Почему неопределенная ссылка на «среднее»?

Ответы на вопрос(3)

Ваш ответ на вопрос