【问题标题】:Compiling for windows on cygwin/mingw在 cygwin/mingw 上为 windows 编译
【发布时间】: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


【解决方案1】:

导入库位于

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

所以你需要定义

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

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2014-03-19
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多