c - Windows 上的静态 libpixman-1.a 链接错误



我正在尝试在MSYS2/MinGW-w64下的Windows上构建一个静态Cairo库,并且无法链接到静态库libpixman-1.a并且无法链接到静态库。链接器错误如下所示:

...
libtool: link: ranlib .libs/libcairoboilerplate.a
C:/Development/MSYS2/mingw32/lib/libpixman-1.a(pixman-x86.c.obj):(.text+0x204): undefined reference to `_pixman_implementation_create_mmx'
C:/Development/MSYS2/mingw32/lib/libpixman-1.a(pixman-x86.c.obj):(.text+0x213): undefined reference to `_pixman_implementation_create_sse2'
C:/Development/MSYS2/mingw32/lib/libpixman-1.a(pixman-x86.c.obj):(.text+0x1b8): undefined reference to `_pixman_implementation_create_ssse3'

该问题似乎与libpixman-1.a库本身直接相关。我已经在网上搜索过,但没有发现有关上述未定义引用的任何问题。我已经向Cairo&Pixman邮件列表发送了消息,因为这两个项目似乎是相关的。我还在他们的IRC频道上联系了开罗项目。我目前仍在等待回复。我还向MSYS2项目发送了一份问题报告。

以下是我用于构建静态libpixman-1.a库的配置命令(它使用我不太熟悉的介子构建系统):

meson --buildtype plain -Ddefault_library=static -Dgtk=disabled ../pixman-0.38.4

MSYS2 使用 Arch Linux 构建系统的端口进行包管理。pixman库的原始构建配置和补丁可以在这里找到。

接下来是我尝试用于构建静态开罗库的配置:

CFLAGS+=" -Wno-implicit-function-declaration"
../cairo-1.16.0/configure --prefix=/mingw32 
--build=x86_64-pc-mingw32 --host=x86_64-pc-mingw32 --enable-win32 --enable-win32-font 
--enable-png --enable-shared=no --enable-static --enable-gobject --enable-tee 
--disable-xlib --disable-xcb --enable-fc --enable-ft --disable-silent-rules 
LIBS="-lharfbuzz -lbz2" ac_cv_prog_GS=${MINGW_PREFIX}/bin/gsc

开罗库的原始构建配置和补丁可以在这里找到。

最初,我也得到了 harfbuzz 和 bzip2 库的未定义引用。但是添加明确的链接(LIBS="-lharfbuzz -lbz2")解决了这些问题。由于链接器已经尝试链接到libpixman-1.a库,因此将其包含在LIBS变量中不会更改任何内容。 而且因为我的系统上没有共享的像素人库,所以使用显式静态链接(-l:libpixman-1.a)也无济于事。我相信我已经尝试过了,但会再试一次,以防万一。

编辑:我找到了-Dmmx=disabled -Dsse2=disabled -Dssse3=disabled构建pixman库并尝试重建的选项。也许这些选项仅在库的共享版本中可用?

禁用 MMX、SSE2 和 SSSE3 优化构建像素人库可以解决问题,并允许我构建仅静态的开罗库:

meson --buildtype plain -Ddefault_library=static -Dgtk=disabled -Dmmx=disabled -Dsse2=disabled 
-Dssse3=disabled ../pixman-0.38.4

相关内容

  • 没有找到相关文章

最新更新