Linking libpng to android native project

て烟熏妆下的殇ゞ 提交于 2019-12-06 12:12:03

问题


I am having problems trying to load libpng in my native android project. It seems, that the compiler doesn't recognize libpng functions, but does recognize types (like png_byte). It compiles normally with types, but throws errors if I add functions.

Here's compile output (windows 7 cmd):

D:\Dropbox\Workspace\Eclipse\GhostEngine\jni>C:\android-ndk-r8\ndk-build
"Compile++ thumb : ghost <= ImagePng.cpp
"Compile++ thumb : ghost <= MainAndroid.cpp
"Compile++ thumb : ghost <= PlatformAndroid.cpp
make: Circular D:/Dropbox/Workspace/Eclipse/GhostEngine//obj/local/armeabi/libst
lport_static.a <- D:/Dropbox/Workspace/Eclipse/GhostEngine//obj/local/armeabi/li
bstlport_static.a dependency dropped.
SharedLibrary  : libghost.so
D:/Dropbox/Workspace/Eclipse/GhostEngine//obj/local/armeabi/objs/ghost/ImagePng.
o: In function `loadPngFile':
D:/Dropbox/Workspace/Eclipse/GhostEngine//jni/ghost/ImagePng.cpp:48: undefined r
eference to `png_sig_cmp'
D:/Dropbox/Workspace/Eclipse/GhostEngine//jni/ghost/ImagePng.cpp:55: undefined r
eference to `png_create_read_struct'
D:/Dropbox/Workspace/Eclipse/GhostEngine//jni/ghost/ImagePng.cpp:61: undefined r
eference to `png_create_info_struct'
D:/Dropbox/Workspace/Eclipse/GhostEngine//jni/ghost/ImagePng.cpp:68: undefined r
eference to `png_create_info_struct'
D:/Dropbox/Workspace/Eclipse/GhostEngine//jni/ghost/ImagePng.cpp:75: undefined r
eference to `png_set_longjmp_fn'
D:/Dropbox/Workspace/Eclipse/GhostEngine//jni/ghost/ImagePng.cpp:77: undefined r
eference to `png_destroy_read_struct'
D:/Dropbox/Workspace/Eclipse/GhostEngine//jni/ghost/ImagePng.cpp:63: undefined r
eference to `png_destroy_read_struct'
D:/Dropbox/Workspace/Eclipse/GhostEngine//jni/ghost/ImagePng.cpp:70: undefined r
eference to `png_destroy_read_struct'
collect2: ld returned 1 exit status
make: *** [D:/Dropbox/Workspace/Eclipse/GhostEngine//obj/local/armeabi/libghost.
so] Error 1

My android.mk in libpng looks like this:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_CFLAGS := 

LOCAL_MODULE    := libpng
LOCAL_SRC_FILES :=\
    png.c \
    pngerror.c \
    pngget.c \
    pngmem.c \
    pngpread.c \
    pngread.c \
    pngrio.c \
    pngrtran.c \
    pngrutil.c \
    pngset.c \
    pngtrans.c \
    pngwio.c \
    pngwrite.c \
    pngwtran.c \
    pngwutil.c 

LOCAL_LDLIBS := -lz

include $(BUILD_STATIC_LIBRARY)

Application.mk:

APP_PLATFORM := android-10
STLPORT_FORCE_REBUILD := true
APP_STL := stlport_static
APP_MODULES := libpng ghost
#APP_CPPFLAGS += -fexceptions

Android.mk in my project folder:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := ghost
FILE_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2

# Support for additional libraries
#LOCAL_CFLAGS := -DANDROID_NDK -Wno-psabi
LOCAL_STATIC_LIBRARIES := android_native_app_glue
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libpng/
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -ldl
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -lz

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

I appreciate your help regarding this subject. Thanks, Martin.


回答1:


I think you may need to add "libpng" to the LOCAL_STATIC_LIBRARIES variable.

If that doesn't work, instead try adding -lpng to your LOCAL_LD_LIBS variable in your Android.mk file. (Which one is needed depends on where the libpng library is put.)




回答2:


I'm not familiar with Makefile's for Android but your problem is that you didn't link with libpng. The compiler makes the object files because it has the header files for libpng but it doesn't know it should link with libpng (try adding -lpng) and the path to it if it's not in the default location.



来源:https://stackoverflow.com/questions/11265733/linking-libpng-to-android-native-project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!