本机 windows c++ 编程?

Native windows c++ programming?

我对 windows 上的本机 c++ 和其他程序有一个快速的问题 -- 我最近在我自己的计算机上用 Visual Studio 编写了一个小的 c++ 程序,它为我做了一些数学运算.我成功编译它并将 .exe 从 VS 调试文件夹移动到我的桌面。 运行 在我的电脑上没问题,无论 .exe 位于何处。但是后来我把这个程序给了我的朋友,当他试图 运行 它时,它说他缺少各种 dll 文件。现在我有一种感觉,这是因为 VS 中包含一个 c++ 环境,它允许它在我的而不是他的上 运行。但我的问题是为什么程序最初是用什么语言编写的很重要?将它编译成 .exe 以将代码转换为机器语言,这样它就可以 运行 在任何计算机上运行(无论是否具有开发工具)的目的不是吗?

此问题与语言无关。如果你缺了dependencies/libraries,有什么东西,当然要大喊大叫了。它期望使用其他 dll 中的代码来知道如何做某事。

一个很好的例子是当你 运行 一个 .exe 并且它说嘿!我们注意到您遗漏了这个 driver/file/dependency 然后它会带您到其他点击以获取它。

编译调试版本将动态地link 调试非Windows 标准的dll 文件版本。您也不 technically/legally 被允许重新分发 dll 文件的调试版本。要么编译一个发布版本,要么包括你正在 link 使用你的 exe 文件的任何 .dll 文件。您可能还需要担心目标计算机是否安装了正确的 Microsoft Visual Studio C++ Redistributable Packages。

或者,你可以静态地link通过在项目属性中的代码生成下设置Runtime Library->Multithreaded /MT,从而绕过dll地狱,虽然由于各种原因我不会深入,这是通常不赞成。

理论中,Exe文件可以运行在任何电脑上CPU等
(与您的操作码相同 "language" )。

实际上,有两个主要问题:

a) 程序文件包含超过 CPU 个命令,具体内容和方式取决于您的操作系统。 Exe (PE) 文件通常在 Windows 中使用,虽然理论上可行,但 Linux 不会 运行 因为没有人以理解 Exe 文件的方式对其进行编程(有其他软件,如 Wine,可以 运行 Exe 在 Linux 上,但必须单独安装)

b) 你不是从头开始写 OS 的每一点,你依赖于你可以使用很多预先存在的功能。如您所知,这些必须出现在 运行 您的程序中。问题是,Visual Studio 假设存在故意不属于 Windows 本身的库。将它们与每个 Windows 安装一起运送不会有问题,但微软选择将它们作为单独下载(评论中提到的 Redist.package)。要在不依赖其他库文件的情况下尽可能多地填充到 Exe 文件中,请为您的项目使用静态链接选项。