2012-03-20 58 views
0

我想在我的C代碼中使用.so文件以在Java中使用(對不起我的英文不好)。我創建了一個名爲libtest.so的庫,其中包含一個簡單函數,該函數返回一個名爲display()的字符串。NDK - 在c文件中使用.so文件

這是我的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' 

我想使用的。所以沒有它的代碼如此 我希望我很清楚。

回答

1

您可以把exp.h與源文件,幷包含頭文件是這樣的:

#include "exp.h" 
0

1加exp.h的位置LOCAL_C_INCLUDES

2你沒有實現顯示(),你應該

一)實現它

b)或你應該添加庫實現它在Android.mk

 LOCAL_SHARED_LIBRARIES += libdisplay    #if is a dynamic library 
    LOCAL_LDFLAGS += /path/to/libdisplay.a   #if is a static library 
+0

我改變了我的化妝文件 'LOCAL_PATH:= $(叫我-DIR)' '$包括(CLEAR_VARS)'' LOCAL_MODULE:= test' 'LOCAL_SRC_FILES:=測試/ libtest。 so' '包括$(PREBUILT_SHARED_LIBRARY)' '包括$(CLEAR_VARS)'' LOCAL_MODULE:= ndkmain' 'LOCAL_SRC_FILES:= libmms-0.6.2/native.c' 'LOCAL_STATIC_LIBRARIES:= test' '包括$(BUILD_SHARED_LIBRARY)' 現在他認識到功能顯示但每次我午餐我的應用程序它說找不到圖書館和圖書館ndkmain找不到 – 2012-03-23 01:39:48

+0

你有沒有建立libndkmain.so? – Gavin 2012-03-23 08:21:34

+0

ichanged我的makefile來 LOCAL_PATH:= $(叫我-DIR) 包括$(CLEAR_VARS) LOCAL_MODULE:= libtest LOCAL_SRC_FILES:=源/ libtest.so 包括$(PREBUILT_SHARED_LIBRARY) 包括$(CLEAR_VARS) LOCAL_MODULE:=插座 LOCAL_SRC_FILES:=源/ interface.c源/ file.c LOCAL_SHARED_LIBRARIES:= libtest LOCAL_C_INCLUDES:= $(LOCAL_PATH)/../../ libtest/JNI /包括 包括$(BUILD_SHARED_LIBRARY)但是我仍然收到錯誤:undefined reference to display() – 2012-07-20 03:49:00