2012-06-29 2 views
2

내 원시 안드로이드 프로젝트에서 libpng을로드하는 데 문제가 있습니다. 컴파일러는 libpng 함수를 인식하지 못하지만 형식 (예 : png_byte)은 인식합니다. 그것은 타입과 함께 정상적으로 컴파일되지만 함수를 추가하면 에러가 발생합니다.libpng를 Android 기본 프로젝트에 연결

여기에 출력 (윈도우 7 cmd를) 컴파일의 :의 libpng에

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 

내 android.mk은 다음과 같습니다

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 

안드로이드. 내 프로젝트 폴더의 mk :

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) 

이 문제와 관련하여 도움을 주셔서 감사합니다. 고마워, 마틴.

답변

3

"libpng"를 LOCAL_STATIC_LIBRARIES 변수에 추가해야 할 수도 있습니다.

그래도 문제가 해결되지 않으면 Android.mk 파일의 LOCAL_LD_LIBS 변수에 -lpng을 추가해보세요. (libpng 라이브러리가있는 위치에 따라 필요하다)

1

나는 Makefile에 익숙하지 않지만, libpng와 링크하지 않은 것이 문제이다. 컴파일러는 libpng에 대한 헤더 파일을 가지고 있기 때문에 객체 파일을 만듭니다.하지만 기본 위치에없는 경우에는 libpng (-lpng을 추가해보십시오)와 경로를 연결해야한다는 것을 모릅니다.

관련 문제