使用 FreeImage 时 Android NDK 链接器错误 'Undefined reference to std::ios_base'

标签 android linker-errors android-ndk freeimage

我正在尝试针对 Android NDK 的 libfreeimage.a 开放框架构建进行静态链接(使用 native Activity 示例作为模板)。

当我编译和链接我的项目时,我遇到了很多链接器错误:

../../../lib/ndk/armeabi-v7a/libfreeimage.a(ImfTimeCodeAttribute.o): In function <code>global constructors keyed to ImfTimeCodeAttribute.cpp': ImfTimeCodeAttribute.cpp:(.text+0x28): undefined reference to</code>std::ios_base::Init::Init()'

我认为这是一个范围界定问题,可以通过向代码添加 namespace 或使用 g++ 而不是 gcc 来解决。我以为 -lstdc++ 会解决问题,但事实并非如此。

如有任何帮助,我们将不胜感激。

Android.mk:


LOCAL_PATH := $(call my-dir)/tmp

include $(CLEAR_VARS)

LOCAL_MODULE := androidapp

LOCAL_CFLAGS := -DFREEIMAGE_LIB\
                -DANDROID_NDK \
                -DDISABLE_IMPORTGL \
                -mfpu=vfp -mfloat-abi=softfp \
                -ffast-math -O3 -DFPM_ARM

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM -lstdc++ -ldl
LOCAL_STATIC_LIBRARIES := android_native_app_glue

LOCAL_LDLIBS += ../../../lib/ndk/armeabi-v7a/libfreeimage.a

LOCAL_ARM_MODE := arm

SRC-FILES := $(wildcard tmp/*.c*)
SRC-FILES := $(SRC-FILES:tmp/%=%)
LOCAL_SRC_FILES += $(SRC-FILES)

APP_OPTIM := release
APP_ABI := armeabi-v7a

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

最佳答案

终于弄明白了 - 对于遇到同样问题的其他人,解决方法是为库添加一个模块,然后包含库:


LOCAL_PATH := $(call my-dir)/tmp

include $(CLEAR_VARS)

LOCAL_MODULE    := freeimage
LOCAL_SRC_FILES := ../../../../lib/ndk/armeabi-v7a/libfreeimage.a
LOCAL_EXPORT_C_INCLUDES := ../../../../lib/inc

include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := androidapp

LOCAL_CFLAGS := -DFREEIMAGE_LIB\
                -DANDROID_NDK \
                -DDISABLE_IMPORTGL \
                -mfpu=vfp -mfloat-abi=softfp \
                -ffast-math -O3 -DFPM_ARM

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM -ldl -lstdc++
LOCAL_STATIC_LIBRARIES := android_native_app_glue

LOCAL_STATIC_LIBRARIES += freeimage

LOCAL_ARM_MODE := arm

SRC-FILES := $(wildcard tmp/*.c*)
SRC-FILES := $(SRC-FILES:tmp/%=%)
LOCAL_SRC_FILES += $(SRC-FILES)

APP_OPTIM := release
APP_ABI := armeabi-v7a

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

关于使用 FreeImage 时 Android NDK 链接器错误 'Undefined reference to std::ios_base',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5636196/

相关文章:

android - 在 Activity 上调用 onPause 时数据会发生什么

android - 批量删除ListView/GridView上的选中项

c++ - Visual Studio 2010 : dll missing

c++ - cpp 中的奇怪链接器错误

java - 写入 jfloat 数组时获取 'Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1)'

android - Cocos2dx 安卓构建错误: "arm-linux-androideabi-g++: No such file or directory"

android - ActionBar fragment 菜单项。把它们放在前面

Android AppcompatActivity 与 fragment 从后台调用后崩溃(需要等待几分钟)

c++ - 尽管使用 -fPIC 进行编译,但链接器错误 "relocation R_X86_64_PC32 against undefined symbol"

android - 尝试使用 OpenSL ES 录制音频时出错