2017-04-22 117 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中