Кросс-компиляция 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
установите флажок в командной строке, чтобы получить подробный вывод, чтобы лучше выяснить, где проблема.