我正在尝试在我的C代码中使用.so文件在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());
}
这是我的makefile
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 我希望我足够清楚。
答案 0 :(得分:1)
您可以将exp.h
与源文件放在一起,并包含如下的头文件:
#include "exp.h"
答案 1 :(得分:1)
1将exp.h的位置添加到LOCAL_C_INCLUDES
2你没有display()的实现,你应该
a)实施它
b)或者您应该在Android.mk中添加库实现它
LOCAL_SHARED_LIBRARIES += libdisplay #if is a dynamic library
LOCAL_LDFLAGS += /path/to/libdisplay.a #if is a static library