Windows 上的静态 libpixman-1.a 链接错误
Static libpixman-1.a Linking Errors on Windows
我正在尝试构建一个静态 Cairo library on Windows under MSYS2/MinGW-w64 并且在 link 到 libpixman-1.a
静态库时遇到了问题。 link错误如下:
...
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 mailing lists, as the two projects appear to be related. I have also contacted the Cairo project on their IRC channel。我目前仍在等待回复。我还向 MSYS2 项目发送了一个问题报告。
以下是我在构建静态libpixman-1.a
库时使用的配置命令(使用了我不太熟悉的Meson Build system):
meson --buildtype plain -Ddefault_library=static -Dgtk=disabled ../pixman-0.38.4
MSYS2 使用端口Arch Linux's build system for its package management. The original build configuration & patches for the pixman library can be found here。
接下来是我试图用于构建静态 cairo 库的配置:
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
cairo 库的原始构建配置和补丁可以是 found here。
最初我还得到了 harfbuzz & bzip2 库的未定义引用。但是向它们添加明确的 links (LIBS="-lharfbuzz -lbz2"
) 解决了这些问题。由于 linker 已经在尝试 link 到 libpixman-1.a
库,因此将其包含在 LIBS
变量中不会改变任何内容。而且因为我的系统上没有共享的 pixman 库,所以使用显式静态 link (-l:libpixman-1.a
) 也无济于事。我相信我已经尝试过了,但会再试一次,以防万一。
编辑: 我找到了构建 pixman 库的选项 -Dmmx=disabled -Dsse2=disabled -Dssse3=disabled
并打算尝试重建。也许这些选项仅在库的共享版本中可用?
在禁用 MMX、SSE2 和 SSSE3 优化的情况下构建 pixman 库修复了问题并允许我构建仅静态的 cairo 库:
meson --buildtype plain -Ddefault_library=static -Dgtk=disabled -Dmmx=disabled -Dsse2=disabled \
-Dssse3=disabled ../pixman-0.38.4
我正在尝试构建一个静态 Cairo library on Windows under MSYS2/MinGW-w64 并且在 link 到 libpixman-1.a
静态库时遇到了问题。 link错误如下:
...
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 mailing lists, as the two projects appear to be related. I have also contacted the Cairo project on their IRC channel。我目前仍在等待回复。我还向 MSYS2 项目发送了一个问题报告。
以下是我在构建静态libpixman-1.a
库时使用的配置命令(使用了我不太熟悉的Meson Build system):
meson --buildtype plain -Ddefault_library=static -Dgtk=disabled ../pixman-0.38.4
MSYS2 使用端口Arch Linux's build system for its package management. The original build configuration & patches for the pixman library can be found here。
接下来是我试图用于构建静态 cairo 库的配置:
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
cairo 库的原始构建配置和补丁可以是 found here。
最初我还得到了 harfbuzz & bzip2 库的未定义引用。但是向它们添加明确的 links (LIBS="-lharfbuzz -lbz2"
) 解决了这些问题。由于 linker 已经在尝试 link 到 libpixman-1.a
库,因此将其包含在 LIBS
变量中不会改变任何内容。而且因为我的系统上没有共享的 pixman 库,所以使用显式静态 link (-l:libpixman-1.a
) 也无济于事。我相信我已经尝试过了,但会再试一次,以防万一。
编辑: 我找到了构建 pixman 库的选项 -Dmmx=disabled -Dsse2=disabled -Dssse3=disabled
并打算尝试重建。也许这些选项仅在库的共享版本中可用?
在禁用 MMX、SSE2 和 SSSE3 优化的情况下构建 pixman 库修复了问题并允许我构建仅静态的 cairo 库:
meson --buildtype plain -Ddefault_library=static -Dgtk=disabled -Dmmx=disabled -Dsse2=disabled \
-Dssse3=disabled ../pixman-0.38.4