Ошибка компоновщика Android NDK ‘Неопределенная ссылка на std:: ios_base’ при использовании FreeImage

#android #linker-errors #android-ndk #freeimage

#Android #компоновщик-ошибки #android-ndk #freeimage

Вопрос:

Я пытаюсь статически связать сборку libfreeimage.a с открытыми фреймворками для Android NDK (используя образец native-activity в качестве шаблона).

Когда я компилирую и связываю свой проект, я получаю множество ошибок компоновщика в соответствии с:


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

Я полагаю, что это проблема с областью видимости, которую можно исправить, либо добавив пространство имен в код, либо используя 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)
  

Комментарии:

1. Удалось ли вам добавить ссылку на freeimage? Если да, то каким образом? Любая помощь была бы высоко оценена

Ответ №1:

Наконец-то разобрался с этим — для всех, у кого такая же проблема, исправление заключается в добавлении модуля для библиотеки, а затем включении библиотеки:

 
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)
  

Комментарии:

1. У меня точно такая же проблема, за исключением того, что ваше решение не помогло. Вы сделали что-нибудь еще, чтобы исправить эту проблему?

2. Удалось ли вам добавить ссылку на freeimage? Если да, то каким образом?