我知道这个问题已被问过几次,我看了很多像
不幸的是,他们都没有为我工作。
我在笔记本上安装了Ubuntu和Windows。
"Hello,World!"
程序
$ gcc -o hello.out -g -Wall -pedantic hello.c
'./output.out'
Hello, World!
所以我在这里交叉开发。我切换到Windows并继续前进。
现在,我尝试将其设为可执行文件,以便在Windows上运行它。我知道Windows无法处理'$ ./output.out'
,好吧,让我们把它变成可执行文件。
在Windows下,我
$ gcc -o hello.exe -g -Wall -pedantic hello.c
注意:我写了 hello.exe 而不是 hello.out 或 hello.c
'$ ./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中编译我的程序,但这也不起作用。
有什么建议吗?非常感谢!
答案 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。