c - Kompilering til vinduer på cygwin/mingw

Indlæg af Hanne Mølgaard Plasc

Problem



Så jeg forsøger at kompilere et simpelt C-eksempel til cairo grafikbiblioteket i cygwin.
Når du samler til cygwin, fungerer alt som forventet, men for Windows kompilerer det, men fungerer ikke, når du forsøger at udføre.


Dette er min makefile:


CFLAGS= -lcairo

#WIN32HEADERS= /usr/i686-w64-mingw32/sys-root/mingw/include/cairo
WIN32HEADERS= /usr/i686-w64-mingw32/sys-root/mingw/include/cairo -I/usr/i686-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/i686-w64-mingw32/sys-root/minclude/glib-2.0 -I/usr/i686-w64-mingw32/sys-root/mlib/glib-2.0/include -I/usr/i686-w64-mingw32/sys-root/minclude/pixman-1 -I/usr/i686-w64-mingw32/sys-root/minclude/freetype2 -I/usr/i686-w64-mingw32/sys-root/minclude/libpng16 -I/usr/i686-w64-mingw32/sys-root/minclude/freetype2 -I/usr/i686-w64-mingw32/sys-root/minclude/libpng16

#WIN32LIBS= ./lib32
WIN32LIBS= ./usr/i686-w64-mingw32/sys-root/mingw/bin

#WIN64HEADERS= /usr/x86\_64-w64-mingw32/sys-root/mingw/include/cairo
WIN64HEADERS= /usr/x86\_64-w64-mingw32/sys-root/mingw/include/cairo -I/usr/x86\_64-w64-mingw32/sys-root/mingw/include/glib-2.0 -I/usr/x86\_64-w64-mingw32/sys-root/minclude/glib-2.0 -I/usr/x86\_64-w64-mingw32/sys-root/mlib/glib-2.0/include -I/usr/x86\_64-w64-mingw32/sys-root/minclude/pixman-1 -I/usr/x86\_64-w64-mingw32/sys-root/minclude/freetype2 -I/usr/x86\_64-w64-mingw32/sys-root/minclude/libpng16 -I/usr/x86\_64-w64-mingw32/sys-root/minclude/freetype2 -I/usr/x86\_64-w64-mingw32/sys-root/minclude/libpng16

WIN64LIBS= ./lib64
#WIN64LIBS= ./usr/x86\_64-w64-mingw64/sys-root/mingw/bin

CYGWINHEADERS= /usr/include/cairo
CYGWINLIBS= /usr/bin


all:
    i686-w64-mingw32-gcc kairo.c -o kairo\_32.exe -I $(WIN32HEADERS) -L $(WIN32LIBS) $(CFLAGS)
    x86\_64-w64-mingw32-gcc kairo.c -o kairo\_64.exe -I $(WIN64HEADERS) -L $(WIN64LIBS) $(CFLAGS)
    gcc kairo.c -o kairo.o -I $(CYGWINHEADERS) -L $(CYGWINLIBS) $(CFLAGS)

#Build for Windows 32 Bit
win32:
    i686-w64-mingw32-gcc kairo.c -o kairo\_32.exe -I $(WIN32HEADERS) -L $(WIN32LIBS) $(CFLAGS)

#Build for Windows 64 Bit
win64:
    x86\_64-w64-mingw32-gcc kairo.c -o kairo\_64.exe -I $(WIN64HEADERS) -L $(WIN64LIBS) $(CFLAGS)

#Build for Cygwin - maybe linux in general?
cygwin:
    gcc kairo.c -o kairo.o -I $(CYGWINHEADERS) -L $(CYGWINLIBS) $(CFLAGS)

#delete everything but the source files
clean:
    rm *.exe
    rm *.o


Jeg har prøvet de kommenterede dele, såvel som de aktuelt aktive dele, men ikke held.
Når jeg forsøger at udføre den resulterende .exe, får jeg en fejl, at libcairo-2.dll mangler, men bør det ikke være muligt at finde det, da det er linket?
Og er der nogen måde at linke til de nødvendige dll'er i en ikke-systemmappe? Jeg kan ikke helt regne ud, hvordan man gør det.

Bedste reference


Import lib er placeret på



  /usr/i686-w64-mingw32/sys-root/mingw/lib/libcairo.dll.a



så du skal definere



  WIN32LIBS =/usr/i686-w64-Mingw32/sys-root/mingw/lib