首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NDK -在c文件中使用.so文件

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

Stack Overflow用户
提问于 2012-03-20 09:10:02
回答 2查看 338关注 0票数 0

我正在尝试在我的C代码中使用.so文件,以便在Java中使用(很抱歉我的英语不好)。我自己创建了一个名为libtest.so的库,其中包含一个返回名为display()的字符串的简单函数。

这是我的C代码

代码语言:javascript
复制
#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

代码语言:javascript
复制
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)

当我编译它时,我得到两个错误

代码语言:javascript
复制
1)error: exp.h: No such file or directory
2)undefined reference to `display'

我想使用不带代码的.so,所以我希望我已经足够清楚了。

EN

回答 2

Stack Overflow用户

发布于 2012-03-20 09:56:00

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

代码语言:javascript
复制
#include "exp.h"
票数 1
EN

Stack Overflow用户

发布于 2012-03-21 20:09:48

1将exp.h的位置添加到LOCAL_C_INCLUDES

2你没有display()的实现,你应该

A)实现它

B)或者您应该添加库,并在Android.mk中实现它

代码语言:javascript
复制
     LOCAL_SHARED_LIBRARIES += libdisplay              #if is a dynamic library
     LOCAL_LDFLAGS += /path/to/libdisplay.a            #if is a static library
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9780170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档