Erro ao tentar construir o pango (1.34.1) e o harfbuzz (0.9.18) da fonte

2

Então, eu estou tentando construir o pango a partir do código-fonte (no meu diretório home, como uma dependência para outra coisa que eu preciso). Isso está em um cluster de computação que executa o SLES 11. Ao compilar, recebo o seguinte erro:

...
Making all in examples
make[2]: Entering directory '/usr/people/xxxx/downloads/pango-1.34.1/examples'
  CC       cairosimple.o
  CCLD     cairosimple
/usr/people/xxxx/local/lib/libharfbuzz.so: undefined reference to 'FT_Get_Advance'
collect2: ld returned 1 exit status
make[2]: *** [cairosimple] Error 1
make[2]: Leaving directory '/usr/people/xxxx/downloads/pango-1.34.1/examples'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/usr/people/xxxx/downloads/pango-1.34.1'
make: *** [all] Error 2

Verificar as dependências do link no libharfbuzz.so me dá o seguinte:

ldd ~ / local / lib / libharfbuzz.so

...
libfreetype.so.6 => /usr/people/xxxx/local/lib/libfreetype.so.6 (0x00007f2323b0f000)

Indo mais longe, executando um objdump em libfreetype.so (que eu também instalei a partir do código fonte) eu recebo:

objdump -T ~ / local / lib / libfreetype.so.6 | grep FT_Get_Advance

00000000000148f0 g    DF .text  0000000000000152  Base        FT_Get_Advance
0000000000014700 g    DF .text  00000000000001ed  Base        FT_Get_Advances

Embora a versão instalada no sistema, em / usr / lib / (a qual não tenho acesso root), não tenha referências a FT_Get_Advance.

Parece que em algum lugar o código está fazendo referência à biblioteca global, embora eu não consiga encontrar onde. Alguém tem alguma ideia?

EDIT: Acabei de executar um objdump em libharfbuzz.so (da versão instalada em meu diretório inicial) e parece que existem muitas referências indefinidas tanto para o freetype quanto para o GLIBC ... Então, o que está errado com como eu estou compilando o harfbuzz?

objdump -T libharfbuzz.so | grep * UND *

0000000000000000      DF *UND*  0000000000000000              FT_Get_Advance
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 mprotect
0000000000000000      DF *UND*  0000000000000000              FT_Load_Sfnt_Table
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memset
0000000000000000      DF *UND*  0000000000000000              FT_Set_Char_Size
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 snprintf
0000000000000000      DF *UND*  0000000000000000              FT_Select_Charmap
0000000000000000      DF *UND*  0000000000000000              g_intern_static_string
0000000000000000      DF *UND*  0000000000000000              g_unichar_combining_class
0000000000000000      DF *UND*  0000000000000000              FT_Load_Glyph
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000  w   D  *UND*  0000000000000000              _Jv_RegisterClasses
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __assert_fail
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strncmp
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 malloc
0000000000000000      DF *UND*  0000000000000000             g_unicode_script_to_iso15924
0000000000000000      DF *UND*  0000000000000000              FT_Done_FreeType
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_atexit
0000000000000000      DF *UND*  0000000000000000              g_unichar_get_mirror_char
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 sysconf
0000000000000000      DF *UND*  0000000000000000              g_unichar_compose
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_mutex_init
0000000000000000      DF *UND*  0000000000000000              g_unicode_script_from_iso15924
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 free
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strlen
0000000000000000      DF *UND*  0000000000000000                FT_Face_GetCharVariantIndex
0000000000000000  w   DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_finalize
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 bsearch
0000000000000000      DF *UND*  0000000000000000              FT_Get_Name_Index
0000000000000000      DF *UND*  0000000000000000              FT_Get_Kerning
0000000000000000      DF *UND*  0000000000000000              g_unichar_decompose
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strerror
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strstr
0000000000000000      DF *UND*  0000000000000000              g_unichar_type
0000000000000000      DF *UND*  0000000000000000              FT_Init_FreeType
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strtol
0000000000000000      DF *UND*  0000000000000000              g_unichar_iswide
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memcpy
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memmove
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strchr
0000000000000000      DF *UND*  0000000000000000              g_unichar_get_script
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 getenv
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __errno_location
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 qsort
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strdup
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strcmp
0000000000000000      DF *UND*  0000000000000000              FT_New_Memory_Face
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 calloc
0000000000000000      DF *UND*  0000000000000000              FT_Get_Char_Index
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strncpy
0000000000000000      DF *UND*  0000000000000000              g_once_init_enter
0000000000000000      DF *UND*  0000000000000000              FT_Get_Glyph_Name
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_mutex_lock
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 realloc
0000000000000000      DF *UND*  0000000000000000              FT_Done_Face
0000000000000000      DF *UND*  0000000000000000              g_once_init_leave
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 setlocale
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_mutex_destroy
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strtoul
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_mutex_unlock
0000000000000000      DF *UND*  0000000000000000              g_unichar_fully_decompose
0000000000000000      DF *UND*  0000000000000000              g_boxed_type_register_static
    
por Al S 19.06.2013 / 17:20

1 resposta

2

2 coisas:

1) Harfbuzz e FreeType aparentemente têm uma infame dependência circular. Isso significa que você precisa realmente fazer suas próprias construções de ambos e em um local totalmente isolado das bibliotecas do sistema.

2) Como regra geral, as ferramentas de compilação do GCC encontrarão as bibliotecas do sistema antes de qualquer construção personalizada (por exemplo, via pkgconfig, FindXXX.cmake, ambiente vars, etc.), a menos que você diga explicitamente para elas seu primeiro. Esse é o principal caso de uso para o qual eles visam, afinal de contas. Verifique se o seu CMakeLists.txt ou Makefile está explicitamente vinculado em sua versão do FreeType, não em nenhum dos sistemas operacionais. Parece que a sua compilação está encontrando o sistema operacional primeiro e, depois, (incorretamente) tentando usá-lo.

Para testar se você está obtendo o FreeType correto, você pode voltar o seu e alterar a versão principal #. Volte a executar a compilação e execute "ldd" ou "readelf -d" em sua compilação do libharfbuzz.so e confirme se você vê a versão correta do Freetype vinculada.

Como um aparte, para construir o Pango para usar o Harfbuzz, a ordem das operações parece ser:
A) Construa o FreeType "simples" B) Construir Harfbuzz
C) Construir novo Freetype com Harfbuzz
D) Finalmente, construa o Pango com o FreeType na etapa (C), mais o Harfbuzz explicitamente.

Eu não tentei ainda, mas essa é a indicação que as várias instruções estão me dando. Eu poderia passar o Harfbuzz inteiramente a menos que você tenha certeza de que precisa, já que a introdução dele implica a reconstrução do FreeType também.

    
por 21.04.2015 / 22:37

Tags