lcc编译大型exe';s

lcc编译大型exe';s,c,lcc-win32,C,Lcc Win32,我在记事本中写下了这篇文章,然后使用lcc-win命令lc-hello.c #include <stdio.h> int main(void) { printf("Hello World\n"); return 0; } #包括 内部主(空) { printf(“Hello World\n”); 返回0; } 生成的exe为100 KB。对于一个只打印Hello World的程序来说似乎有点大。这正常吗?我可以缩小尺寸吗?如今,100KB并不是一个真正的问题,但对于它的功

我在记事本中写下了这篇文章,然后使用
lcc-win
命令
lc-hello.c

#include <stdio.h>
int main(void)
{
  printf("Hello World\n");
  return 0;
}
#包括
内部主(空)
{
printf(“Hello World\n”);
返回0;
}

生成的exe为100 KB。对于一个只打印
Hello World
的程序来说似乎有点大。这正常吗?我可以缩小尺寸吗?如今,100KB并不是一个真正的问题,但对于它的功能来说,它似乎仍然有点大。如果我写的每一个C代码都是100KB的exe,那就不太糟糕了。

1-每次使用
include
标记时,都会与C库建立链接并将其加载到程序中。 这也是为什么只包含在实际需要库函数的文件中很重要的原因


2-另一方面,您生成的二进制文件总是充满了重要信息(cf:
libelf
ASM
)、标题、步骤,如果您想让程序正常运行,这些信息需要在这里。这确实需要空间。

这是一个非常简单的问题,lcc win的情况与C编译器Digital Mars相同,他不将exe与包含函数printf等的DLL链接,函数与exe链接在一起,因此不需要重新查询您的计算机是否具有DLL

看,我创建了一个简单的Hello World EXE,并在十六进制编辑器中打开了hin。。。。printf函数存储在msvcrt.dll中,exe在导入部分没有此dll

并且,您可以在另一张图片中找到源定义:


使用这种类型的函数定义比进行dll调用更快……

可能的重复我不明白为什么要使用lcc,而在过去10年中有mingw可用。我使用哪种编译器会有区别吗?无论如何,lcc下载量小,安装速度快。我所需要的只是一个在windows上运行的C编译器。与cygwin不同,mingw的gcc是否编译在windows机器上运行的exe而不需要某种dll?不,它不会对您使用的编译器产生太大影响。您看到的增加C的可执行文件的大小(与java相比,例如)是它必须自己完成所有的启动。像java这样的解释语言让他们的虚拟机为他们这样做。但是对于较大的代码,这种开销应该是微不足道的。使用BCC64静态链接编译它,您将得到8MB的可执行文件。不,使用
include
指令不能控制链接到二进制文件中的库。@HonkyTonk如果包含的文件具有链接特定库的pragma指令,则可以