gpt4 book ai didi

c++ - 无法解决构建 Android NDK 库时出现的 "undefined reference to"错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:27:22 25 4
gpt4 key购买 nike

我在使用 Android NDK 时遇到“对 ___ 的 undefined reference ”错误。有很多像我这样的问题,但没有一个对我有帮助。我的主要问题可能是理解出了什么问题,或者可能是我对 Android.mk makefile 命令一无所知。

这是我运行 ndk-build 时的第一个输出。注意 libProcessor.soImage.cpp 中对 Image::findTransform() 的函数调用,当然还有 undefined 引用到'矩阵::矩阵(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 时将 Matrix 构造函数的代码放在哪里。 cpp。”?

最佳答案

因此您没有在构建中包含 Matrix 的源文件。如果您有多个文件,您可以像这样修改您的 Android.mk 而不是手动列出它们:

LOCAL_SRC_FILES := Processor.cpp Image.cpp
LOCAL_SRC_FILES += $(foreach file, $(wildcard jni/newmat10/*.cpp), ../${file})

关于c++ - 无法解决构建 Android NDK 库时出现的 "undefined reference to"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26168994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com