Кръстосано компилиране на 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 libs. CAIRO_LDFLAGS := $(shell $(PKG_CONFIG) cairo --libs). Това ще намери пътя до вашите хост библиотеки, което вероятно е различна архитектура от целта. Несъответствие на архитектурата като това наистина може да причини странни проблеми с линкера. Вярвам, че трябва да търсите нещо като usr/x86_64-w64-mingw32/bin/pkg-config.

Други неща, които да опитате;

Изпълнете командите за компилиране ръчно, тъй като make-файлът може да потиска изхода.

Освен това, когато изпълнявате командата, добавете флага -v към командния ред, за да получите подробен изход, за да разберете по-добре къде е проблемът.

person Joshua Rahm    schedule 22.09.2015