无法解决构建安卓 NDK 库时出错"undefined reference to"
Cannot solve "undefined reference to" error building an Android NDK library
我在使用Android NDK时出现"未定义对___的引用"错误。像我这样的SO问题有很多,但没有一个对我有帮助。我的主要问题可能是理解哪里出了问题,也可能是我对Android.mk makefile命令一无所知。
这是我运行ndk构建时的第一个输出。请注意libProcessor.so,Image.cpp中对Image::findTransform()的函数调用,当然还有对'Matrix::Matrix(int,int)'的未定义引用:
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 15 in ./AndroidManifest.xml
[armeabi-v7a] SharedLibrary : libProcessor.so
/Applications/adt-bundle-mac-x86_64-20140702/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/objs/Processor/Image.o: in function Image::findTransform(float, float, CGPoint, CGPoint, CGPoint, CGPoint, float&, float&, float&, float&, float&, float&, float&, float&):jni/Image.cpp:1230: error: undefined reference to 'Matrix::Matrix(int, int)'
它抱怨的代码行很简单:
Matrix A(8,8);
源代码文件中的Matrix类,而不是预构建的库。起初,我对Matrix类有编译错误,但在包含newmat10.h文件后,这些错误都消失了,所以我知道正在找到newmat10目录及其所有源代码。这就是让我困惑的地方:定义Matrix类的源代码文件正与调用它的Image.cpp代码一起构建到libProcessor.So中,那么它还需要知道什么才能解析引用呢?也许问题出在我的Android.mk文件中,它在这里:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Processor
LOCAL_SRC_FILES := Processor.cpp Image.cpp
LOCAL_LDLIBS := -llog
LOCAL_C_INCLUDES :=
$(LOCAL_PATH)/newmat10
include $(BUILD_SHARED_LIBRARY)
当然,我特别需要修复这个错误,但我也非常想了解它的具体性质。系统不是说,"我现在正在尝试编写Image.o对象文件,我看到了Matrix对象的声明,但当我成功编译Image.cpp时,我不知道我把Matrix构造函数的代码放在哪里了。"?
因此,构建中没有包含Matrix
的源文件。如果你有几个文件,你可以这样修改你的Android.mk
,而不是手动列出它们:
LOCAL_SRC_FILES := Processor.cpp Image.cpp
LOCAL_SRC_FILES += $(foreach file, $(wildcard jni/newmat10/*.cpp), ../${file})
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- 快速傅立叶变换:使用模板化派生类'undefined reference'即使标头和.cpp文件匹配也会出错
- "Undefined reference to"使用双模板类声明对象时出错
- 无法解决构建安卓 NDK 库时出错"undefined reference to"
- 在窗口"undefined reference to 'WinMain@16'"中创建窗口时出错
- 定义函数后主文件出错? "undefined reference to 'sequence::sequence()'"
- "Undefined reference to" 链接目标文件时出错
- C++:使用"std"时出错"Undefined symbols for architecture x86_64"