Android NDK linker error 'Undefined reference to std::ios_base' when using FreeImage

12,619

Finally figured this out - for anyone else with the same problem, the fix is to add a module for the library and then include the library:


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)

Share:
12,619
Mike
Author by

Mike

Updated on June 13, 2022

Comments

  • Mike
    Mike about 2 years

    I am trying to statically link against the open frameworks build of libfreeimage.a for the Android NDK (using the native-activity sample as a template).

    When I compile and link my project I get a lot of linker errors along the lines of:

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

    I believe this is a scoping problem that can be fixed by either adding a namespace to the code or using g++ over gcc. I thought -lstdc++ would fix the problem but it did not.

    Any help would be greatly appreciated.

    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)
    
    
  • Tony
    Tony over 12 years
    I am having exact same problem except your solution didn't help. Is there anything else did you do to fix this problem?
  • Sreekanth Karumanaghat
    Sreekanth Karumanaghat almost 12 years
    Did you succeed in Adding freeimage reference?If yes how?