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

  • 相关阅读:
    mysql access denied for user root Mysql用户无权限
    远程链接调用sql脚本
    CuteEditor使用详解
    如何设置release模式
    ShardingJDBC不分库,只分表例子
    SpringCloud Stream整合RocketMQ实现消息发送与接收
    Spring Cloud Gateway的PrefixPath及StripPrefix功能
    使用MongoDB的Spring Boot和MongoTemplate教程
    ShardingJDBC读写分离案例
    SpringBoot那些好用的连接池HikariCP
  • 原文地址:https://www.cnblogs.com/guanshan/p/guan2020-1-15_001.html
Copyright © 2011-2022 走看看