NDK - использование файла .so в файле ac - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь использовать .so файл в своем коде C для использования в Java (извините за мой плохой английский).Я создал библиотеку с именем libtest.so, содержащую одну простую функцию, которая возвращает строку с именем display().

Это мой код C

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <jni.h>
#include <exp.h> //the header in libtest.so

jstring Java_com_JuionAndroid_TUNandroid_hellondk_Main_invokeNativeFunction(JNIEnv* 
env,jobject this,jstring javaString)
{
    return (*env)->NewStringUTF(env, display());
}

И это мой make-файл

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test/libtest.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)

LOCAL_MODULE    := ndkmain
LOCAL_SRC_FILES := libmms-0.6.2/native.c
include $(BUILD_SHARED_LIBRARY)

Когда я его скомпилирую, я получаю две ошибки

1)error: exp.h: No such file or directory
2)undefined reference to `display'

Я хочу использовать .so без его кода, поэтому я надеюсь, что я достаточно ясен.

Ответы [ 2 ]

1 голос
/ 21 марта 2012

1 добавить местоположение exp.h в LOCAL_C_INCLUDES

2 у вас нет реализации для display (), вам следует

а) реализовать его

б) или вы должны добавить библиотеку, реализующую ее в Android.mk

     LOCAL_SHARED_LIBRARIES += libdisplay              #if is a dynamic library
     LOCAL_LDFLAGS += /path/to/libdisplay.a            #if is a static library
1 голос
/ 20 марта 2012

Вы можете поместить exp.h в исходный файл и включить заголовочный файл следующим образом:

#include "exp.h"
...