Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
静态链接如何处理系统文件? 我是一个C++程序员,我想在VisualStudio中制作一个完全静态的程序(只是一个.exe)。这让我思考,因为有一些外部依赖是从用户的计算机中提取的,比如MSVCP.dll。这些依赖项是从程序员的计算机中嵌入到程序中的,还是仍然被忽略并从用户那里提取出来的_C++_Visual C++ - Fatal编程技术网

静态链接如何处理系统文件? 我是一个C++程序员,我想在VisualStudio中制作一个完全静态的程序(只是一个.exe)。这让我思考,因为有一些外部依赖是从用户的计算机中提取的,比如MSVCP.dll。这些依赖项是从程序员的计算机中嵌入到程序中的,还是仍然被忽略并从用户那里提取出来的

静态链接如何处理系统文件? 我是一个C++程序员,我想在VisualStudio中制作一个完全静态的程序(只是一个.exe)。这让我思考,因为有一些外部依赖是从用户的计算机中提取的,比如MSVCP.dll。这些依赖项是从程序员的计算机中嵌入到程序中的,还是仍然被忽略并从用户那里提取出来的,c++,visual-c++,C++,Visual C++,-阿里 这些依赖项是从程序员的计算机中嵌入到程序中的,还是仍然被忽略并从用户那里提取出来的 作为@Igor注释,您可以执行以下任一操作。区别在于(可能相当大)单个独立的静态链接可执行文件或依赖本地DLL运行的文件 这些依赖项是从程序员的计算机中嵌入到程序中的,还是仍然被忽略并从用户那里提取出来的 作为@Igor注释,您可以执行以下任一操作。差异是一个(也许相当大的)单个独立的静态链接的可执行文件或一个依赖于本地DLL运行的文件。 < P> MS VisualC++编译器提供了选择要链接到MS V

-阿里

这些依赖项是从程序员的计算机中嵌入到程序中的,还是仍然被忽略并从用户那里提取出来的

作为@Igor注释,您可以执行以下任一操作。区别在于(可能相当大)单个独立的静态链接可执行文件或依赖本地DLL运行的文件

这些依赖项是从程序员的计算机中嵌入到程序中的,还是仍然被忽略并从用户那里提取出来的


作为@Igor注释,您可以执行以下任一操作。差异是一个(也许相当大的)单个独立的静态链接的可执行文件或一个依赖于本地DLL运行的文件。

< P> MS VisualC++编译器提供了选择要链接到MS VisualC/C++运行库的版本的选项。这些选择包括:

  • /MT-静态链接到CRT的非调试多线程版本。这样做的好处是不需要将CRT DLL与应用程序一起提供,否则它可能需要在某些系统上运行。缺点是应用程序使用的CRT代码必须烘焙到可执行文件中,从而增加其大小。如果您的应用程序有多个可执行文件和DLL,那么这就更加复杂了,因为必须在每个可执行文件和DLL中烘焙大量相同的CRT代码
  • /MTd-静态链接CRT的调试多线程版本。与上面相同,但添加的调试信息将使其运行更慢,甚至更大。主要用于开发构建
  • /MD-动态链接到CRT的非调试多线程版本的DLL。这可以减少程序可执行文件的大小。如果您的应用程序由多个可执行文件和DLL组成,由于它们之间可以共享相同的CRT代码,则这一节省会更加复杂。这可能需要您提供CRT DLL或让您的用户单独安装,这可能会带来额外的麻烦和复杂性
  • /MDd-动态链接到CRT调试多线程版本的DLL。同上,但添加的调试信息将运行较慢。主要用于开发构建
使用一个简单的hello world程序进行快速测试,编译后的可执行文件在/MD中的大小约为12KB,而在/MT中的大小约为219KB,因此大小上的差异是相当大的,特别是如果您正在发布大量的小程序



过去也有单线程版本的库,理论上可以提供更好的单线程性能和更小的大小,但这些不再提供新版本的CRT。大概差别太小了,因为它不能合理地传递整个库的构建。

C++:PMS Visual C++编译器让您有选择选择要链接到MS VisualC/C++运行库的版本。这些选择包括:

  • /MT-静态链接到CRT的非调试多线程版本。这样做的好处是不需要将CRT DLL与应用程序一起提供,否则它可能需要在某些系统上运行。缺点是应用程序使用的CRT代码必须烘焙到可执行文件中,从而增加其大小。如果您的应用程序有多个可执行文件和DLL,那么这就更加复杂了,因为必须在每个可执行文件和DLL中烘焙大量相同的CRT代码
  • /MTd-静态链接CRT的调试多线程版本。与上面相同,但添加的调试信息将使其运行更慢,甚至更大。主要用于开发构建
  • /MD-动态链接到CRT的非调试多线程版本的DLL。这可以减少程序可执行文件的大小。如果您的应用程序由多个可执行文件和DLL组成,由于它们之间可以共享相同的CRT代码,则这一节省会更加复杂。这可能需要您提供CRT DLL或让您的用户单独安装,这可能会带来额外的麻烦和复杂性
  • /MDd-动态链接到CRT调试多线程版本的DLL。同上,但添加的调试信息将运行较慢。主要用于开发构建
使用一个简单的hello world程序进行快速测试,编译后的可执行文件在/MD中的大小约为12KB,而在/MT中的大小约为219KB,因此大小上的差异是相当大的,特别是如果您正在发布大量的小程序



过去也有单线程版本的库,理论上可以提供更好的单线程性能和更小的大小,但这些不再提供新版本的CRT。可能差异太小了,无法提供完整的单独版本的库。

有一个选项可以链接到静态版本的C运行时库(CRT),而不是DLL版本。如果您这样做,那么是的,CRT被烘焙到可执行文件中。CRT可以静态链接。虽然如果目标用户在windows 10上,您可能不必担心为VS2015或更高版本提供运行时。静态CRT的好处是您不必随安装程序包提供可再发行版本。主要是可执行文件的大小。如果我动态链接到CRT,一个简单的hello world应用程序的大小约为12KB,如果我静态链接到CRT,则大小约为219KB。@drescherjm缺点是,它可能会与包含自己的静态CRT的其他库发生冲突,并且由于安全原因