如何为 Windows 创建可执行的 C 文件

Big*_*ude 5 c windows gcc cygwin visual-studio

我知道这个问题已经被问过好几次了,我看了很多,比如

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

我的情况

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

  • 假设我"Hello,World!"使用 c 中的文本编辑器开发了一个简单的程序。
  • 在 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.outhello.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 中编译我的程序,但这也不起作用。

有什么建议?非常感谢!

mat*_*eri 5

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)
Run Code Online (Sandbox Code Playgroud)

如果你需要一个独立的程序,一个解决方案是使用 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)
Run Code Online (Sandbox Code Playgroud)

您可以将生成的程序移动到另一台未安装 cygwin 的 Windows 计算机上。