Freetype FT_Request_Size()在Android上崩溃

时间:2012-06-04 01:18:18

标签: android crash freetype freetype2

我在android上编译了freetype 2.4.2,每次尝试使用FT_Set_Char_Size()时,它都会在此行的FT_Request_Size()函数的ftobjs.c文件中崩溃

error = clazz->request_size( face->size, req );    //line 2832

我的代码在Windows,Linux,Mac,IPhone和iPad上运行得非常好。但这是交易。 我遇到了完全相同的问题,在Windows(vc ++)上的相同位置崩溃,直到我使用/ Za“禁用语言扩展”编译freetype。

所以我很确定它是如何在Android上编译freetype引起崩溃的。 我已经查找了如何在Android上禁用语言扩展,但没有用。

这是我的freetype

的Android.mk文件
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/builds \
    $(LOCAL_PATH)/include

LOCAL_SRC_FILES:= \
    src/base/ftbbox.c \
    src/base/ftbitmap.c \
    src/base/ftglyph.c \
    src/base/ftstroke.c \
    src/base/ftxf86.c \
    src/base/ftbase.c \
    src/base/ftsystem.c \
    src/base/ftinit.c \
    src/base/ftgasp.c \
    src/raster/raster.c \
    src/sfnt/sfnt.c \
    src/smooth/smooth.c \
    src/autofit/autofit.c \
    src/truetype/truetype.c \
    src/cff/cff.c \
    src/psnames/psnames.c \
    src/pshinter/pshinter.c \
    src/type1/type1.c \
    src/cid/type1cid.c \
    src/pfr/pfr.c \
    src/type42/type42.c \
    src/winfonts/winfnt.c \
    src/pcf/pcf.c \
    src/psaux/psaux.c \
    src/bdf/bdf.c \
    src/gzip/ftgzip.c \
    src/lzw/ftlzw.c

LOCAL_CFLAGS += -DFT2_BUILD_LIBRARY
LOCAL_MODULE := freetype
LOCAL_LDLIBS := -ldl -llog

include $(BUILD_STATIC_LIBRARY)

我的完整项目可以在这里找到

    http://digitalknob.googlecode.com

它编译得很好,我没有错误。我使用FT_Set_Char_Size()时崩溃了。让我疯狂几天吧:P非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这是答案。事实证明,整个问题是从.apk文件加载字体文件,因为它是技术上压缩的。使用SDL,我们使用SDL_RWops在.apk文件的assets文件夹中加载字体文件。我们使用ftgles将字体文件加载到OpenGLES中。完整的示例可以在www.digitalknob.com

找到
SDL_RWops *file = SDL_RWFromFile(filename, "rb"); 

unsigned long fileLen; 
SDL_RWseek(file,0,SEEK_END); 
fileLen=SDL_RWtell(file); 
SDL_RWseek(file,0,SEEK_SET); 

//Allocate memory 
buffer=(unsigned char *)malloc(fileLen+1); 
if (!buffer){ 
   printf("Memory error!\n"); 
   SDL_RWclose(file); 
   return; 
} 

//Read file contents into buffer 
SDL_RWread(file, buffer, fileLen, 1); 
SDL_RWclose(file); 

texture_font = new FTGLTextureFont(buffer, fileLen); 
texture_font->FaceSize(18); 

//don't forget to free your buffer later.
//free(buffer);

如果您不使用SDL,则需要使用zlib或其他东西来访问该字体文件。