Кросс-компиляция cairo для x86_64-w64 с mingw

У меня есть приложение, которое снова связывает SDL и Cairo, которое я хотел бы кросс-компилировать на Ubuntu для Win64. Я использовал этот отличный пост в блоге для получения кросс-компиляции SDL, и я использовал другой пост в блоге для кросс-компиляции zlib, libpng и libpixman.

Однако теперь я получаю ошибку компоновщика при попытке скомпилировать мою минимальную тестовую программу:

$ make cairotest.exe 
x86_64-w64-mingw32-gcc -o cairotest.o -c cairotest.c -I/usr/x86_64-w64-mingw32/include/SDL2 -Dmain=SDL_main -I/home/jshaw/x86_64-w64/include/cairo -I/home/jshaw/x86_64-w64/include/pixman-1 -I/home/jshaw/x86_64-w64/include/libpng16 
x86_64-w64-mingw32-gcc -o cairotest.exe cairotest.o -L/usr/x86_64-w64-mingw32/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -L/home/jshaw/x86_64-w64/lib -lcairo 
collect2: error: ld returned 1 exit status
Makefile:13: recipe for target 'cairotest.exe' failed

Я должен отметить, что эта тестовая программа работает правильно, если я просто использую SDL2 без кода Каира, поэтому я подозреваю, что что-то не так с библиотекой Каира, которую я кросс-компилировал. Как мне следует диагностировать проблему?

1 ответ

Глядя на ваш Makefile, кажется, что вы используете обычный pkg-config для того, чтобы открыть свои Каирские библиотеки. CAIRO_LDFLAGS := $(shell $(PKG_CONFIG) cairo --libs), Это позволит найти путь к вашим хост- библиотекам, который, предположительно, отличается от целевой. Подобное несоответствие архитектуры может вызвать странные проблемы с компоновщиком. Я считаю, что вы должны искать что-то вроде usr/x86_64-w64-mingw32/bin/pkg-config,

Другие вещи, чтобы попробовать;

Запустите команды компиляции вручную, поскольку make-файл может подавлять вывод.

Кроме того, при запуске команды добавьте -v установите флажок в командной строке, чтобы получить подробный вывод, чтобы лучше выяснить, где проблема.

Другие вопросы по тегам