2017-04-22 83 views
0

所以,我想爲cygwin中的開羅圖形庫編譯一個簡單的C示例。 爲cygwin編譯時,一切都按預期工作,但對於編譯的窗口,但在嘗試執行時無效。針對cygwin/mingw上的windows編譯

這是我的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 

我試着註釋掉的部分,以及當前的活動零件,但沒有運氣。 試圖執行生成的.exe文件時,出現libcairo-2.dll丟失的錯誤,但是它應該無法找到它,因爲它已鏈接? 是否有任何方式鏈接到非系統文件夾中所需的DLL?我無法弄清楚如何做到這一點。

+0

所有是非常簡單地 - SYSTE m找不到'libcairo-2.dll'。將它放在相同的文件夾中,其中exe。 '但它不應該能夠找到它,因爲它被鏈接了嗎?' - 當然沒有 – RbMm

+0

好吧,那實際上解決了這個特定的dll的錯誤 - 我只會重複說明,直到我沒有得到更多的錯誤。但是,我應該通過編譯器,以便將dll放到我的項目的子文件夾中? – Bananicorn

+0

@RbMm它的工作原理是,每個必需的dll與exe文件位於同一個目錄中 - 你可以只發表你的評論作爲答案,所以我可以upvote你? – Bananicorn

回答

0

的導入庫位於

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

,所以你需要定義

WIN32LIBS =的/ usr/i686的-W64-的mingw32/SYS-根/的mingw/lib中