Я пытаюсь создать статическую Каирская библиотека в Windows под MSYS2/MinGW-w64, и у меня возникают проблемы с подключением к статической библиотеке 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 по их IRC-канал. В настоящее время я все еще жду ответов. Я также отправил отчет о проблеме в проект MSYS2.
Ниже приведена команда конфигурации, которую я использовал для создания статической библиотеки libpixman-1.a
(в которой используется Система сборки Мезон, с которым я не очень знаком):
meson --buildtype plain -Ddefault_library=static -Dgtk=disabled ../pixman-0.38.4
MSYS2 использует порт Система сборки Arch Linux для управления пакетами. Первоначальная конфигурация сборки и исправления для библиотеки pixman могут быть нашел здесь.
Далее идет конфигурация, которую я пытаюсь использовать для создания статической библиотеки 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 могут быть нашел здесь.
Первоначально я также получал неопределенные ссылки для библиотек Харфбазз и bzip2. Но добавление к ним явных ссылок (LIBS = "-lharfbuzz -lbz2"
) решило эти проблемы. Поскольку линкер уже пытается слинковать библиотеку libpixman-1.a
, включение ее в переменную LIBS
ничего не меняет. И поскольку в моей системе нет общей библиотеки pixman, использование явной статической ссылки (-l:libpixman-1.a
) также не помогает. Кажется, я уже пытался это сделать, но на всякий случай попробую еще раз.
Редактировать: Я нашел варианты -Dmmx=disabled -Dsse2=disabled -Dssse3=disabled
для сборки библиотеки pixman и собираюсь попробовать восстановить. Возможно, эти параметры доступны только в общей версии библиотеки?
Сборка библиотеки pixman с отключенными оптимизациями MMX, SSE2 и SSSE3 устраняет проблему и позволяет мне собрать только статическую библиотеку cairo:
meson --buildtype plain -Ddefault_library=static -Dgtk=disabled -Dmmx=disabled -Dsse2=disabled \
-Dssse3=disabled ../pixman-0.38.4