Кросс-компиляция 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 без какого-либо кода cairo, поэтому я подозреваю, что что-то не так с библиотекой cairo, которую я кросс-компилировал. Как мне диагностировать проблему?


person hertzsprung    schedule 25.05.2015    source источник


Ответы (1)


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

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

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

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

person Joshua Rahm    schedule 22.09.2015