我知道要在Windows上运行c ++,你需要专门针对Windows进行编译,同样适用于Linux和... ...
但是,例如,如果我正在编译用本机c ++编写的Windows程序,我可以在新安装的Windows PC上运行它吗?我的意思是,在没有下载可视化c ++运行时库等的情况下,我可以编译它,比方说,在我的计算机上重新安装Windows,并在不安装任何其他东西的情况下运行它?
(上面的问题使用Windows作为示例,但同样的事情可以在新安装的Linux发行版上完成?例如Ubuntu) 提前谢谢。
答案 0 :(得分:15)
唯一的答案是“它取决于”。
操作系统可以通过多种方式“运行”程序,可以构建程序的多种方式,以及可以组装多种方式的代码。
仅使用“标准库”且静态链接所有库的程序,不需要任何其他依赖(在某种意义上,它需要的所有代码都在二进制本身或OS中)作为系统本身一部分的图书馆已经存在于系统中。
可是:
静态链接标准库(最有可能存在于所有程序中)会使相同代码的许多副本的内存使用量膨胀。这就是库经常动态链接的原因,但这也需要“安装”这些库
仅使用标准库的程序只能以某种方式“共同”(或可以通常表示)到所有系统中,从而失去使操作系统与另一个系统不同的所有特性。
有些“平台” - 根据其外围设备的性质 - 并不代表另一种:咖啡机有12个按键和一个文本的2行x 20 col显示屏。 PC有一个鼠标,一个键盘和一个显示器,可以达到甚至10,000个像素的宽度,每个数百万的颜色。平板电脑具有触摸表面,可以同时抓住多个点。 你能想象一个程序在这三个平台上运行相同的程序吗?
答案 1 :(得分:0)
没有。通常,库在不同系统上是不同的。如果您的程序涉及任何GUI,那么您肯定会拥有无法在其他操作系统上运行的操作系统特定代码。
如果编写一个针对没有GUI代码的g ++编译器的C ++程序,可能仍会有一些特定于操作系统的代码。但是你应该能够轻松地移植它。
如果你的程序只使用stl和stdio,那么它可能是可移植的。例如,MS STL的:: c_str()函数与linux函数有点不同。
答案 2 :(得分:0)
对于它的价值,当使用带有静态链接到libc和libc ++的MinGW时,你的C ++应用程序很可能适用于任何Windows系统'95及更高版本,除非你特别启用了Windows API中的功能像NT功能一样可用。我为Windows 7编译的所有SDL应用程序(当然都是32位编译)在我的'95机器上运行良好。
部署Linux应用程序时,最好只提供源以及配置脚本或makefile。这将确保用户具有您的应用程序的有效依赖项。如果您愿意,可以将二进制文件部署到特定的包管理器。
答案 3 :(得分:-1)
是的,标准库无处不在。试想一下,你得到的大部分程序都是用C / C ++编写的。当你使用像winsock等一些指定的库时,只有依赖关系,因此一些Windows应用程序不太可能在linux上工作,反之亦然。