2015-08-09 28 views
-1

我有一個預構建如此的文件,其中有兩個功能,即時通訊嘗試調用C函數名稱作爲myFunction()在C類中的其他項目在C類 問題是當我使用ndk-build命令編譯項目時,它會給出這個錯誤「未定義的引用我的函數」。「未定義的引用我的功能」Android的Ndk

這是預生成這樣的 「C類」

int myFunction() 
{ 
    int number = 10; 
    return number; 
} 

jstring Java_com_example_compileso_MainActivity_myFunction(JNIEnv* env, jobject javaThis) 
{ 
    return (*env)->NewStringUTF(env, "String from C class!"); 
} 

我打電話myFunction的()在其他項目。 這是我調用我的函數的C類。

void newFunction() 
{ 
    int nResult = myFunction(); 

    printf("%s", str); 
} 

我創建JNI文件夾的文件夾lib和放置預生成文件,所以也&做出Android.mk文件 這是lib文件夾的Android.mk文件。

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libndkfunction-prebuilt 
LOCAL_SRC_FILES := libndkfunction.so 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 
include $(PREBUILT_SHARED_LIBRARY) 

這是我的項目Android.mk文件我的項目

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

# Here we give our module name and source file(s) 
LOCAL_MODULE := ndkfun 
LOCAL_SRC_FILES := ndkfun.c 

LOCAL_SHARED_LIBRARIES := libndkfunction-prebuilt   
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/jni/include     
include $(BUILD_SHARED_LIBRARY) 

Java類。

public class MainActivity extends Activity 
{ 
    static 
     { 
     System.loadLibrary("ndkfun"); 
     } 

    private native String mynewFunction(); 
    public native int myFunction(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.activity_main); 
     TextView textview = new TextView(this); 
     textview.setText(mynewFunction()); 
     setContentView(textview); 

    }} 

回答

0

你必須在Java代碼中聲明myFunction功能:

public class MainActivity extends Activity { 

    public native int myFunction(); 

} 
+0

是的,我也宣佈在java中 – user3835770

+0

myFunction的(),所以添加的代碼片斷,你宣佈它 –

+0

是'myFunction'返回一個jstring或jint(代碼中有兩個簽名) –

相關問題