NDK-在c文件中使用.so文件

NDK-在c文件中使用.so文件,c,makefile,android-ndk,C,Makefile,Android Ndk,我试图在我的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 libtes

我试图在我的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());
}
当我编译它时,我得到两个错误

1)error: exp.h: No such file or directory
2)undefined reference to `display'
我想使用。所以没有它的代码,所以
我希望我说得够清楚。

您可以将
exp.h
与源文件放在一起,并包括如下头文件:

#include "exp.h"

1将exp.h的位置添加到本地_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

我将make文件更改为
LOCAL\u PATH:=$(调用我的目录)
包含$(清除变量)
本地模块:=test
本地SRC\u文件:=test/libtest。因此
包含$(预构建共享库)
包含$(清除变量)
本地\u模块:=ndkmain
本地\u SRC\u文件:=libmms-0.6.2/native.c
本地\u静态\u库:=test
包含$(构建共享\u库)
现在他识别出函数显示,但每次我用午餐时,我的应用程序都会说找不到库和库ndkmain找不到你有libndkmain.so被构建了吗?我将我的makefile更改为LOCAL\u PATH:=$(调用我的dir)include$(清除变量)LOCAL\u模块:=libtest LOCAL\u SRC\u文件:=source/libtest.so include$(预构建的共享\u库)include$(CLEAR_VARS)LOCAL_MODULE:=socket LOCAL_SRC_FILES:=source/interface.c source/file.c LOCAL_SHARED_LIBRARIES:=libtest LOCAL_c_INCLUDES:=$(LOCAL_PATH)/../libtest/jni/include$(BUILD_SHARED_libtest lib库)但我仍然得到了一个错误:未定义的显示引用()如何编译libtest?在NDK中使用相同的工具链?你能告诉我“file libtest.so”的结果吗?还有“nm libtest.so | grep display”的结果
     LOCAL_SHARED_LIBRARIES += libdisplay              #if is a dynamic library
     LOCAL_LDFLAGS += /path/to/libdisplay.a            #if is a static library