1

libharuを Android 用にコンパイルしようとしています。私のjniフォルダーには次のものがあります:

  • /jni/lpng154/には libpng のすべてのソースとインクルード ファイルが含まれます。
  • /jni/libharu-2.2.1/ libharuのすべてのソースとインクルード ファイル

これは私のAndroid.mk ( /jni/フォルダー内) です。libharu には libpng との依存関係があるため、最初に libpng をコンパイルする必要があります。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

sources := 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_C_INCLUDES := $(LOCAL_PATH)/lpng154
LOCAL_MODULE     := png
LOCAL_LDLIBS     := -lz
LOCAL_SRC_FILES  := $(sources:%=lpng154/%)

include $(BUILD_STATIC_LIBRARY)

次に、libharu をコンパイルします。

include $(CLEAR_VARS)

sources := hpdf_annotation.c \
    hpdf_array.c \
    hpdf_binary.c \
    hpdf_boolean.c \
    hpdf_catalog.c \
    hpdf_destination.c \
    hpdf_dict.c \
    hpdf_doc.c \
    hpdf_doc_png.c \
    hpdf_encoder.c \
    hpdf_encoder_cns.c \
    hpdf_encoder_cnt.c \
    hpdf_encoder_jp.c \
    hpdf_encoder_kr.c \
    hpdf_encrypt.c \
    hpdf_encryptdict.c \
    hpdf_error.c \
    hpdf_ext_gstate.c \
    hpdf_font.c \
    hpdf_font_cid.c \
    hpdf_fontdef_base14.c \
    hpdf_fontdef.c \
    hpdf_fontdef_cid.c \
    hpdf_fontdef_cns.c \
    hpdf_fontdef_cnt.c \
    hpdf_fontdef_jp.c \
    hpdf_fontdef_kr.c \
    hpdf_fontdef_tt.c \
    hpdf_fontdef_type1.c \
    hpdf_font_tt.c \
    hpdf_font_type1.c \
    hpdf_gstate.c \
    hpdf_image.c \
    hpdf_image_png.c \
    hpdf_info.c \
    hpdf_list.c \
    hpdf_mmgr.c \
    hpdf_name.c \
    hpdf_namedict.c \
    hpdf_null.c \
    hpdf_number.c \
    hpdf_objects.c \
    hpdf_outline.c \
    hpdf_page_label.c \
    hpdf_page_operator.c \
    hpdf_pages.c \
    hpdf_real.c \
    hpdf_streams.c \
    hpdf_string.c \
    hpdf_u3d.c \
    hpdf_utils.c \
    hpdf_xref.c \
    hpdf_pdfa.c

LOCAL_C_INCLUDES := \
    $(LOCAL_PATH)/lpng154 \
    $(LOCAL_PATH)/libharu-2.2.1/include \
    $(LOCAL_PATH)/libharu-2.2.1/src

LOCAL_LDLIBS    := -lz  -lm
LOCAL_MODULE    := haru
LOCAL_SRC_FILES := $(sources:%=libharu-2.2.1/src/%)

LOCAL_STATIC_LIBRARIES := z png

include $(BUILD_SHARED_LIBRARY)

ndk-buidを実行すると、ファイル *hpdf_image_png.c* をコンパイルしようとするとコンパイラが停止し、次のような多くのエラーが発生します。

.../src/hpdf_image_png.c: In function 'ReadPngData_Interlaced':
.../src/hpdf_image_png.c:113: error: dereferencing pointer to incomplete type
.../src/hpdf_image_png.c:118: error: dereferencing pointer to incomplete type
.../src/hpdf_image_png.c:119: error: dereferencing pointer to incomplete type
.../src/hpdf_image_png.c:129: error: dereferencing pointer to incomplete type
...
...

ndk-build はpng.hを見つけることができないと思います...コンパイラがヘッダーを見つけるのをどのように支援できますか?

Android.mk にフラグを追加する場合:

LOCAL_CFLAGS    := -DLIBHPDF_HAVE_NOPNGLIB

2 つの行の前に:

LOCAL_LDLIBS    := -lz  -lm
LOCAL_MODULE    := haru
...

ndk-build everithingを実行して正常にコンパイルします...しかし、libharu に埋め込まれた png が見逃されます。

皆さんのお陰で。

4

3 に答える 3

1

ファイル「pnglibconf.h」が見つからないため、lpng / scripts / pnglibconf.h.prebuiltにあります。pnglibconf.h.prebuiltの名前をpnglibconf.hに変更し、フォルダーlpngに追加します。また、file:hpdf_image_png.cを変更し、次の行を追加する必要があります:#includepnginfo.hの後に#includepng.h。それがすべてです、私はあなたが成功できると信じています。

于 2012-02-07T12:51:18.173 に答える
1

libpng 1.5 でコンパイルすると libharu にバグがあります。

このパッチを適用できます: https://github.com/tony2001/libharu/commit/e5bf8b01f6c3d5e3fe0e26ac5345e0da10c03934

于 2011-09-02T08:05:20.123 に答える