zoukankan      html  css  js  c++  java
  • C语言生成程序问题

    问题:

    我用VS2013写好C语言程序调试运行后就在debug文件夹下生成了EXE文件,可以在本机运行。
    但是这个EXE文件在别的没装过VS2013的电脑上就不能直接运行,说丢失MSVCR120D.dll文件。
    我重装系统后,没来得及安装VS2013,那些生成好的EXE时也都出现了上述问题。
    由此,我认为是VS2013帮我安装好了一些东西。
    但是,人家商业开发的软件在各样电脑上都可以运行,根本不需要客户安装VS和下载各种dll,
    那么,有什么办法能让我的EXE可以不安装这个dll而直接运行呢?使它具有通用性呢?

    答案:

    这是个老问题了,无非就是运行库动态编译和静态编译的问题了。dll动态加载的话有个好处,它可以减少生成的exe文件的体积,但是缺点就是如果对应的系统环境变量或者exe所在的目录里面找不到其所需要的dll文件的话,程序就会拒绝执行。而静态编译就是把所有需要的库都静态编译到exe文件里面,这样就可以在所有的系统平台上都能运行,但它也有一个缺点,就是生成的exe文件因为已经带了部分库的代码,所以体积会相对动态编译出来的exe大(具体大多少要根据库的内容才能确定)。 
    解决方法:
    对于直接使用cl.exe和link.exe编译连接的方式:
    直接在cl.exe编译的时候或者在makefile里面把编译参数加上/MT即可。
    对于在vs2013里面使用新建项目的方式:
    右击相应的项目,选择“属性”,在项目属性页中的“配置属性”下面的“C/C++”下面的“代码生成”一项,由默认的“多线程调试DLL(/MDd)”,改成“多线程 (/MT)”,确定之后,重新生成项目即可。这样所得的exe文件就是静态编译了。
    
    
  • 相关阅读:
    Linux网络编程必看书籍推荐
    SpringMVC DispatcherServlet初始化过程
    freemarker写select组件(五)
    hdu 1009 FatMouse' Trade
    新IOS编程语言 Swift 新编译器Xcode6
    NoSQL数据库:数据的一致性
    POJ 3041 Asteroids
    POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)
    __repr__与__str__
    HDU 4950 Monster(公式)
  • 原文地址:https://www.cnblogs.com/duyy/p/3715672.html
Copyright © 2011-2022 走看看