我在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非常感谢任何帮助。
答案 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或其他东西来访问该字体文件。