我有一个关于原生c++的快速问题,以及其他一些在windows上编程的问题--我最近在自己的电脑上用Visual编写了一个小的c++程序,为我做了一些数学计算。我成功地编译了它,并将.exe从VS调试文件夹移到我的桌面上。它在我的计算机上运行良好,无论.exe位于何处。但是后来我把这个程序给了我的朋友,当他试图运行它时,它说他丢失了各种各样的dll文件。现在我有一种感觉--这是因为VS中包含了一个c++环境,允许它在我的而不是他的环境上运行。但我的问题是,为什么程序最初是用什么语言编写的呢?是否需要将代码编译成.exe,将代码转换为机器语言,这样它就可以在任何计算机上运行,而不管是否有开发工具?
发布于 2015-08-05 21:42:20
编译调试版本将动态链接到不符合Windows标准的dll文件的调试版本。技术上或法律上也不允许重新分发dll文件的调试版本。要么编译一个发行版,要么包含与您的exe文件链接到的任何.dll文件。您可能还必须担心目标计算机是否安装了适当的Microsoft C++可再发行包。
或者,您可以通过在项目属性中的代码生成下设置运行时库->多线程/MT来静态链接,从而绕过dll地狱,尽管出于各种原因,我不想进入其中,但这通常是不能接受的。
发布于 2015-08-05 21:43:25
理论上,Exe文件可以在任何具有适当CPU等的计算机上运行。
(与您的操作码“语言”相同)
实际上,有两个主要问题:
( a)程序文件包含的不仅仅是CPU命令,什么以及如何依赖于例如,您的操作系统。Exe (PE)文件通常在Windows中使用,虽然理论上是可能的,但是Linux不会运行它,因为没有人以一种理解Exe文件的方式对它进行编程(还有一些附加的软件,比如葡萄酒,它可以在Linux上运行Exe,但必须单独安装)
( b)你并不是从头开始编写操作系统,而是依赖于你可以使用很多预先存在的功能。如您所知,这些必须在运行您的程序时在场。问题是,Visual假定存在有意不属于Windows的库。在每次安装Windows操作系统的时候都会有问题,但微软选择单独下载( Redist )。(评论中提到的包)。若要在不依赖其他库文件的情况下尽可能多地填充Exe文件,请为项目使用静态链接选项。
发布于 2015-08-05 21:30:09
这个问题与语言无关。如果您缺少依赖关系/库,当然它会大喊大叫。它希望使用来自另一个dll的代码来了解如何做一些事情。
一个很好的例子是,当你运行一个.exe,上面写着嘿!我们注意到您缺少了这个驱动程序/文件/依赖项,然后它会让您通过其他的单击来获得它。
https://stackoverflow.com/questions/31843123
复制相似问题