zoukankan      html  css  js  c++  java
  • c++生成的动态库移到其他电脑上,动态库不能运行

    最近的一个项目中遇到了一个问题,C++的一个动态库在我自己的电脑上可以被C#程序引用,我把程序安装到其他电脑上出现了异常,提示找不到DLL,偶然间发现我安装vsc++,C#的程序就不会报错。因为这个C++的动态库是我根据c++的静态库自己封装的。在查阅了资料之后,我尝试着改变代码生成的方式,居然成功了。记录一下我的解决方案。

     

    修改运行库的模式为 MT模式,即可解决问题。

    各个设置选项代表的含义
    编译选项

    包含

    静态链接的lib

    说明

    /MD

    _MT、_DLL

    MSVCRT.lib

    多线程、Release、DLL版本的运行时库

    /MDd

    _DEBUG、_MT、_DLL

    MSVCRTD.lib

    多线程、Debug、DLL版本的运行时库

    /MT

    _MT

    LIBCMT.lib

    多线程、Release版本的运行时库

    /MTd

    _DEBUG、_MT

    LIBCMTD.lib

    多线程、Debug版本的运行时库

    简单的说:

    (1)/MD,表示运行时库由操作系统提供一个DLL,程序里不集成。

    (2)/MT,表示运行时库由程序集成。

    /MD、/MT的选择
          1、为什么选择/MD,不选/MT?
             (1)程序就不需要静态链接运行时库,可以减小软件的大小;

             (2)所有的模块都采用/MD,使用的是同一个堆,不存在A堆申请,B堆释放的问题;

       (3)用户机器可能缺少我们编译时使用的动态运行时库。(补充:如果我们软件有多个DLL,采用/MT体积增加太多,则可以考虑/MD + 自带系统运行时库)

          2、为什么选择/MT,不选择/MD?
             (1)有些系统可能没有程序所需要版本的运行时库,程序必须把运行时库静态链接上。

         (2)减少模块对外界的依赖。

          3、多个模块,必须选择相同的运行时库。
     

    参考:https://www.cnblogs.com/cswuyg/archive/2012/02/03/2336424.html
    ————————————————
    版权声明:本文为CSDN博主「ezreal_pan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/ezreal_pan/article/details/89204725

  • 相关阅读:
    vue.js实战——.native修饰符
    vue.js实战——props数据验证(自定义构造器检测)
    vue.js实战——props单向数据流
    vue组件之嵌套
    vue非父子组件之间的通信——发布订阅模式,总线机制
    脚本加载优化方法
    文字溢出时,实现在末尾显示三个点省略效果
    1-stm32 gpio库函数
    2-C语言 排序算法
    电子工程师扫盲
  • 原文地址:https://www.cnblogs.com/guanshan/p/guan2020-1-15_001.html
Copyright © 2011-2022 走看看