【发布时间】:2017-09-19 08:54:39
【问题描述】:
所以,我正在尝试为 cygwin 中的 cairo 图形库编译一个简单的 C 示例。 为 cygwin 编译时,一切都按预期工作,但对于 windows,它可以编译,但在尝试执行时不起作用。
这是我的生成文件:
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?我不知道该怎么做。
【问题讨论】:
-
一切都很简单——系统找不到
libcairo-2.dll。例如,将它放在同一个文件夹中,其中 exe.but shouldn't it be able to find it since it's linked?- 当然不是 -
好吧,这确实解决了这个特定 dll 的错误 - 我将重复其余部分,直到不再出现错误。但是我应该通过什么编译器才能将 dll 放入项目的子文件夹中?
-
@RbMm 现在每个所需的 dll 都与 exe 位于同一目录中,它可以正常工作 - 您能否将您的评论作为答案发表,以便我为您投票?
-
compiler (!!) 和 dll 放到子文件夹中有什么关系!?甚至 linker 这里也绝对不相关。为此,您不需要也不能将某些内容传递给编译器或链接器。如果 exe 不需要系统 dll - 安装程序的任务会将所有 dll 放置在可以找到的位置。通常这是 exe 所在的同一文件夹。需要将 PATH 变量添加到系统
标签: c windows gcc cygwin mingw