2012-09-08 3 views
1

FreeType 라이브러리를 사용하여 간단한 스크립트를 작성하려고합니다. segfault는 FT_Set_Pixel_Sizes 메서드를 실행하는 동안 발생하지만 제대로 사용하고 있습니다. 어떤 도움이라도 좋을 것입니다. 여기에 전체 코드는 다음과 같습니다아주 간단한 소스 Segfault

#include <ft2build.h> 
#include FT_FREETYPE_H 

main() { 

    FT_Library library; 
    FT_Face face; 
    FT_GlyphSlot slot; 
    FT_UInt glyph_index = 30; 
    char* font_file = "/usr/share/fonts/truetype/freefont/FreeMono.ttf"; 

    // Render font 
    FT_New_Face(library, font_file, 0, &face); 

    FT_Set_Pixel_Sizes(face, 0, 16); /* THIS LINE IS CAUSING THE SEGFAULT */ 

    slot = face->glyph; 
    FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); 
    FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL); 
} 
+0

몇 분 전에이 질문을 본 것으로 생각 했습니까? – cnicutar

+0

그래서'FT_New_Face'의 반환 값은 무엇을 말합니까? – chris

답변

3

당신은 당신의 Library 변수를 초기화하지 않았다 FT_LIBRARY documentation를 참조하십시오. 당신은 FT_Init_FreeType를 사용해야합니다

FT_Init_FreeType

FT_FREETYPE_H에 정의

(FreeType에서/freetype.h).

FT_EXPORT (FT_Error) FT_Init_FreeType (FT_Library * alibrary);

새 FreeType 라이브러리 개체를 초기화하십시오. 이 함수에 의해 등록 된 인 모듈 집합은 빌드시 결정됩니다.

출력 라이브러리 새 라이브러리 객체에 대한 핸들입니다.

반환 FreeType 오류 코드. 0은 성공을 의미합니다.

먼저 tutorial 다음에이 라이브러리에 익숙해 질 수 있습니다. 반환 값도 확인하십시오.

+0

네, 맞습니다. 나는 튜토리얼을 통해 봤는데 이것은 처음부터 무언가를 쓰는 나의 첫번째 시도였다. 내가 초기화를 잊어 버린 것처럼 보입니다. 감사! –

1

라이브러리를 초기화하지 않았습니다.

FT_Library library; 
error = FT_Init_FreeType(&library); 
if (error) { /* report error and exit */ } 

위와 같은 함수의 반환 값을 확인해야합니다. 예를 들어, FT_New_Face은 (아마도 사용자의 경우와 마찬가지로) 오류를 반환하므로 정의되지 않은 상태로 남아 있기 때문에 face에 액세스하면 안됩니다.

관련 문제