我已经创建了一个带有声明的头文件"abc.h“
int abc();然后,我创建了一个带有定义的.cpp文件"abc.cpp“。
int abc()
{
return 10;
}现在,我从上面的文件创建了一个库libabc.so。
然后,我创建了一个HelloWorld安卓项目。然后,我在jni中创建了一个lib文件夹,并将libabc.so文件放入其中。
现在,我在jni文件夹中创建了另一个文件"xyz.cpp“,希望使用abc()函数。但是,当我运行ndk-build命令时,我会得到这个错误。Error: undefined reference to function abc。
这是xyz.cpp文件.
int getAbcFunction()
{
int value = abc();
// return value;
}jni中的Android.mk -> lib文件夹
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := abc-prebuild
LOCAL_SRC_FILES := libabc.so
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)jni文件夹中的Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_MODULE := helloworld
LOCAL_SRC_FILES := xyz.cpp
LOCAL_SHARED_LIBRARIES := abc-prebuild
include $(BUILD_SHARED_LIBRARY)如何解决这个错误。
发布于 2015-08-19 06:26:33
将#include "abc.h"添加到xyz.cpp开头
发布于 2015-08-25 09:51:41
如果您使用的是Android,默认情况下将忽略Makefile,因为所有配置都应该使用gradle或gradle-实验性插件。
但是这些本地预构建还不支持,因此您应该禁用默认支持并调用ndk-build:
android.sources{
main.jni {
source {
srcDirs 'src/main/none' //deactivate built-in compilation
}
}
main.jniLibs {
source {
srcDir 'src/main/libs' //integrate .so files from src/main/libs
}
}
}顺便说一句,这与你的问题并不完全相关,但你有:
LOCAL_SRC_FILES := libabc.so这意味着你打算使用这个预先建成的(armeabi?)对于所有NDK支持的架构(armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips、mips64),即使它们不兼容。你应该这么做
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libabc.so相反,拥有不同版本的.so文件。
https://stackoverflow.com/questions/32087522
复制相似问题