-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);
}}
是的,我也宣佈在java中 – user3835770
myFunction的(),所以添加的代碼片斷,你宣佈它 –
是'myFunction'返回一個jstring或jint(代碼中有兩個簽名) –