将libpng链接到android native project [英] Linking libpng to android native project
问题描述
我在尝试在本机android项目中加载libpng时遇到问题. 看来,编译器无法识别libpng函数,但可以识别类型(如png_byte).它可以正常编译类型,但是如果我添加函数,则会抛出错误.
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.
这是编译输出(Windows 7 cmd):
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
我在libpng中的android.mk看起来像这样:
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:
Application.mk:
APP_PLATFORM := android-10
STLPORT_FORCE_REBUILD := true
APP_STL := stlport_static
APP_MODULES := libpng ghost
#APP_CPPFLAGS += -fexceptions
我的项目文件夹中的Android.mk:
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.
推荐答案
我认为您可能需要在LOCAL_STATIC_LIBRARIES变量中添加"libpng".
I think you may need to add "libpng" to the LOCAL_STATIC_LIBRARIES variable.
如果这不起作用,请尝试将-lpng
添加到Android.mk文件中的LOCAL_LD_LIBS变量中. (需要哪一个取决于libpng库的放置位置.)
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.)
这篇关于将libpng链接到android native project的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!