首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图从源构建pango (1.34.1)和harfbuzz (0.9.18)时出错

试图从源构建pango (1.34.1)和harfbuzz (0.9.18)时出错
EN

Unix & Linux用户
提问于 2013-06-19 15:20:59
回答 1查看 1.9K关注 0票数 3

因此,我试图从源代码构建pango (在我的主目录中,作为对我需要的其他东西的依赖)。这是在运行SLES 11的计算机集群上进行的。在编译时,我得到以下错误:

代码语言:javascript
复制
...
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

通过检查libharfbuzz.so上的链接依赖关系,我可以看到以下内容:

ldd ~/local/lib/libharfbuzz.so

代码语言:javascript
复制
...
libfreetype.so.6 => /usr/people/xxxx/local/lib/libfreetype.so.6 (0x00007f2323b0f000)

更进一步,在libfreetype.so上运行objdump (我也是从源代码中安装的)得到:

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

代码语言:javascript
复制
00000000000148f0 g    DF .text  0000000000000152  Base        FT_Get_Advance
0000000000014700 g    DF .text  00000000000001ed  Base        FT_Get_Advances

尽管安装在系统上的版本( in /usr/lib/ (我没有根访问权限))没有对FT_Get_Advance的引用。

它看起来像是代码引用全局库的地方,尽管我似乎找不到哪里。有人有什么想法吗?

编辑:我刚刚在libharfbuzz.so上运行了一个objdump (安装在我的主目录中的版本),而且似乎有许多对freetype和GLIBC的未定义引用.那么,我编写harfbuzz的方法有什么问题?

objdump -T libharfbuzz.so \ grep *UND*

代码语言:javascript
复制
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
EN

回答 1

Unix & Linux用户

发布于 2015-04-21 20:37:36

2件事:

1) Harfbuzz和FreeType显然有一个臭名昭著的循环依赖关系。这意味着您确实需要对两者进行自己的构建,并且在一个与系统库完全隔离的地方进行构建。

2)根据经验,GCC构建工具会在您自己的任何定制构建之前找到系统库(例如通过pkgconfig、FindXXX.cmake、环境vars等)。除非你明确告诉他们先看看你的。毕竟,这是他们所针对的主要用例。检查您的CMakeLists.txt或Makefile是否在FreeType版本中显式链接,而不是任何OS版本。听起来你的构建是第一次找到操作系统,然后(错误地)尝试使用它。

为了测试您是否获得了正确的FreeType,您可以备份您的版本,然后修改主要版本#。重新运行构建,然后在构建的-d上运行"ldd“或"readelf libharfbuzz.so”,并确认您看到了链接到的正确版本的自由类型。

顺便说一句,建造Pango来使用Harfbuzz的操作顺序似乎是:

( A)建立“普通”FreeType

( B)建造哈夫巴斯

( C)用Harfbuzz构建新的自由类型

( D)最后,使用步骤(C)中的FreeType构建Pango,并显式地加上Harfbuzz。

我还没有试过,但这是各种指示给我的指示。我可能会完全传递哈夫巴斯,除非你确定你需要它,因为它的引入似乎也意味着重建FreeType。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/80006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档