You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Meson构建Pango静态库时依赖项链接失败

问题描述

尝试将Pango构建为静态库(采用Meson构建系统),编译步骤已完成,但链接阶段出现大量libfontconfig、libpixman-1和libpng的未定义引用错误。这些依赖库均已存在且可通过PKG_CONFIG_PATH找到,此前Cairo(1.17.8版本)的构建已完成。

构建Pango使用的命令:

meson setup --reconfigure --buildtype release --strip --prefix $INSTALL_ROOT/pango --libdir $INSTALL_ROOT/pango/lib --default-library static $BUILD_ROOT\pango $DOWNLOAD_ROOT/pango
meson compile -C $BUILD_ROOT/pango
meson install -C $BUILD_ROOT/pango

错误信息片段:

[361/445] Linking target subprojects/harfbuzz/util/hb-view
FAILED: subprojects/harfbuzz/util/hb-view
g++  -o subprojects/harfbuzz/util/hb-view subprojects/harfbuzz/util/hb-view.p/hb-view.cc.o -L/home/test/Intermediates/ThirdParty/BuildProducts/zlib/lib -I/home/test/Intermediates/ThirdParty/BuildProducts/zlib/include -Wl,--as-needed -Wl,--no-undefined -Wl,-O1 -fPIC -pthread -Wl,--start-group subprojects/harfbuzz/src/libharfbuzz.a /home/test/Intermediates/ThirdParty/BuildProducts/freetype/lib/libfreetype.a /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/libbz2.so /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/libz.so /home/test/Intermediates/ThirdParty/BuildProducts/cairo/lib/libcairo.a /home/test/Intermediates/ThirdParty/BuildProducts/glib/lib/libglib-2.0.a -lm /home/test/Intermediates/ThirdParty/BuildProducts/glib/lib/libpcre2-8.a -Wl,--end-group
/bin/ld: /home/test/Intermediates/ThirdParty/BuildProducts/cairo/lib/libcairo.a(cairo-image-compositor.o): in function `lerp':
cairo-image-compositor.c:(.text+0x86): undefined reference to `pixman_image_composite32'
/bin/ld: cairo-image-compositor.c:(.text+0xca): undefined reference to `pixman_image_composite32'
/bin/ld: /home/test/Intermediates/ThirdParty/BuildProducts/cairo/lib/libcairo.a(cairo-image-compositor.o): in function `_mono_finish_unbounded_spans':
...
/bin/ld: /home/test/Intermediates/ThirdParty/BuildProducts/cairo/lib/libcairo.a(cairo-png.o): in function `write_png':
cairo-png.c:(.text+0x304): undefined reference to `png_create_write_struct'
cairo-png.c:(.text+0x31a): undefined reference to `png_create_info_struct'
...
解决思路
  • 检查Cairo静态库的依赖链:静态库不会自动包含依赖的符号,你构建的Cairo静态库依赖pixman-1、libpng、fontconfig等库,需确保Meson在链接时能找到这些依赖。可通过PKG_CONFIG_PATH包含这些依赖的.pc文件目录,或在Meson setup时显式指定路径。
  • 显式传递缺失的依赖库:在meson setup命令中添加参数手动指定缺失的库,示例:
    meson setup --reconfigure --buildtype release --strip --prefix $INSTALL_ROOT/pango --libdir $INSTALL_ROOT/pango/lib --default-library static -Dextra_libs="-lpixman-1 -lpng -lfontconfig" $BUILD_ROOT/pango $DOWNLOAD_ROOT/pango
    
  • 处理Harfbuzz的依赖传递:错误出在Harfbuzz工具的链接环节,需确保Harfbuzz能正确获取Cairo的全部静态依赖。可在Meson配置中强制Harfbuzz使用静态依赖,保证依赖链完整。
  • 验证依赖库的静态版本:确认libfontconfig、libpixman-1、libpng均提供静态库(.a文件),仅动态库无法满足静态链接的符号解析需求。
  • 调整链接器参数:链接命令中的--as-needed可能跳过必要的静态库,可尝试移除该参数或调整Meson的链接标志,示例:
    meson setup --reconfigure --buildtype release --strip --prefix $INSTALL_ROOT/pango --libdir $INSTALL_ROOT/pango/lib --default-library static -Db_ldflags="-Wl,--no-as-needed" $BUILD_ROOT/pango $DOWNLOAD_ROOT/pango
    

内容的提问来源于stack exchange,提问作者Paavo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:17:08