如何为Windows

时间:2016-07-12 12:20:21

标签: c windows visual-studio gcc cygwin

我知道这个问题已被问过几次,我看了很多像

不幸的是,他们都没有为我工作。

我的情况

我在笔记本上安装了Ubuntu和Windows。

  • 假设我使用c。
  • 中的文本编辑器开发了一个简单的"Hello,World!"程序
  • 在Ubuntu中,我使用GCC编译了它 $ gcc -o hello.out -g -Wall -pedantic hello.c
  • 我执行了'./output.out'
  • 得到了结果Hello, World!

我尝试了什么

所以我在这里交叉开发。我切换到Windows并继续前进。

现在,我尝试将其设为可执行文件,以便在Windows上运行它。我知道Windows无法处理'$ ./output.out',好吧,让我们把它变成可执行文件。

在Windows下,我

  • 安装了cygwin
  • 在Cygwin中,我使用GCC编译它 $ gcc -o hello.exe -g -Wall -pedantic hello.c

注意:我写了 hello.exe 而不是 hello.out hello.c

  • 在Cygwin中,我执行了'$ ./output.exe'
  • 得到了结果Hello, World!

注意:此时,它甚至可以在Windows下使用我的Shell,因为我安装了Cygwin并设置了我的PATH等。这意味着我可以打开我的命令行,转到其中的目录找到'hello.exe'并通过键入'> hello.exe'

执行它

我以为那就是它,所以我拿了hello.exe'并把它移到另一个笔记本(不是我的本地机器)。我试图执行它,但它没有用。

起初,我收到了一条cygwin1.dll缺失消息。修复后,出现另一个错误。

我正在努力实现的目标

长话短说: 我写这么多的原因是我想详细介绍一下我的情况。

基本上,我正在尝试创建一个可执行的c文件,任何Windows用户都可以在没有任何开发工具的情况下执行该文件。

在Eclipse和Java中,您只需导出程序,使其成为可运行的-jar文件。用户所要做的就是安装最新的Java SE版本以使其运行。

此外,我尝试在Visual Studio中编译我的程序,但这也不起作用。

有什么建议吗?非常感谢!

2 个答案:

答案 0 :(得分:3)

cygwin gcc生成一个链接到cygwin1.dll的可执行文件。所以没有它就无法使用。

gcc  hello.c -o hello-cygwin.exe

$ ldd hello-cygwin.exe
        ntdll.dll => /cygdrive/c/Windows/SYSTEM32/ntdll.dll (0x77bd0000)
        kernel32.dll => /cygdrive/c/Windows/system32/kernel32.dll (0x77ab0000)
        KERNELBASE.dll => /cygdrive/c/Windows/system32/KERNELBASE.dll (0x7fefdc60000)
        SYSFER.DLL => /cygdrive/c/Windows/System32/SYSFER.DLL (0x75650000)
        cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)

如果您需要独立程序,解决方案是使用mingw编译器 (它可以在cygwin上作为交叉编译器提供给windows)

$ x86_64-w64-mingw32-gcc.exe hello.c -o hello-mingw64.exe

$ ldd hello-mingw64.exe
        ntdll.dll => /cygdrive/c/Windows/SYSTEM32/ntdll.dll (0x77bd0000)
        kernel32.dll => /cygdrive/c/Windows/system32/kernel32.dll (0x77ab0000)
        KERNELBASE.dll => /cygdrive/c/Windows/system32/KERNELBASE.dll (0x7fefdc60000)
        SYSFER.DLL => /cygdrive/c/Windows/System32/SYSFER.DLL (0x75650000)
        msvcrt.dll => /cygdrive/c/Windows/system32/msvcrt.dll (0x7fefdf40000)

您可以在没有安装cygwin的其他Windows机器上移动生成的程序。

答案 1 :(得分:0)

您应该使用mingw,这是Windows的gcc端口,而不是cygwin下的gcc。你可以得到它here