• VS编译release版本的出现的LNK1104 无法打开文件“libboost_filesystem-vc140-mt-1_58.lib


    最近在用restbed和vs2015做一个项目,debug编译的没问题,但是编译release就有问题,困扰了一天,说下我的出坑过程。

    1、我用到了外部的库 restbed ,首先要想正确编译过,你的外部链接库要与工程的链接编译选项一致。比如:我是X64 release MD链接 在VS2015一下编译,你在编译restbed或者其他的外部库的时候,也要采取同样的编译方式才能顺利编译通过。

    2、加入boost库的 include路径和lib库的路径(外部库的加入工程方式也是如此)

         include头文件的路径有两种方式: 

         (1)项目属性页,VC++目录 --  包含目录

         (2)项目属性页,C/C++常规 -- 附加包含目录 

       加入lib库的路径:

         (1)项目属性页,VC++目录 --  库目录

         (2)项目属性页,连接器 -- 常规 -- 附加库目录

    3、debug编译通过,release就是编不过,提示错误:无法打开文件“libboost_filesystem-vc140-mt-1_58.lib

       

         这种问题,首先你要确认下,debug和release的工程属性页是否都是正确配置:

         

       再确认下所引用的外部库,是否是以debug或者release的形式编译的。

       

       这些都没问题,还是会提示错误无法打开文件“libboost_filesystem-vc140-mt-1_58.lib

     好了 这个时候你就需要编译boodt库了

    登陆boost官网;www.boost.org   找到提示错误的boost版本,下载 解压,

    运行bootstrap.bat文件,等这个批处理处理完。

    在VS所在的环境 比如 VS2015 X86 这种 打开命令行,进入boost的根目录,执行命令:bjam --build-type=complete toolset=msvc-14.0 threading=multi link=shared address-model=64

    编译完,就有了lib和头文件。

    上面的命令是简化版本的比较方便,还有详细的命令:

    address-model: 如果没有这个参数,是生成32位的平台库,=x64是生成x64的平台库
    –toolset=msvc-14.0: 编译器,比如msvc-14.0(VS2015),可选的还有gcc, borland等
    link:生成动态链接库(=static)/静态链接库(=shared)
    runtime-link:动态/静态链接C++运行库,有shared和static两种方式
    threading=multi:单/多线程编译,一般写多线程,直接指定为multi

    --stagedir参数  表示生成目录的存放目录

    按照步骤2 把boost加入工程,

    库名字的识别:

       boost中为每个库编译了4中C/C++链接方式的静态链接库

         ① /MT   /MTd

          bjam   stage     --toolset=msvc-10.0  --build-type=complete  --stagedir="H:Boostoost_1_57_0invc10"     link=static    runtime-link=static     threading=multi   debug release

          生成的库名字格式

          /MT: libboost_atomic-vc100-mt-s-1_57.lib      /MTd:  libboost_atomic-vc100-mt-sgd-1_57.lib

         ② /MD   /MDd

          bjam   stage     --toolset=msvc-10.0  --build-type=complete  --stagedir="H:Boostoost_1_57_0invc10"     link=static    runtime-link=shared     threading=multi   debug release

          生成的库文件名字格式

          /MD:  libboost_atomic-vc100-mt-1_57.lib         /MDd:  libboost_atomic-vc100-mt-gd-1_57.lib

    结果还是提示错误,最后最后有一个大坑!!!!

    如果我们使用动态的boost库,那我们只能动态的调用系统的运行时库。这里有个坑,如果我们使用动态库,静态方式链接boost,那么我们得将动态库的lib文件名称前面加上lib,vs默认是有的,比如:
    release 和 x64 和 MD
    libboost_date_time-vc141-mt-x64-1_69.lib
    我们需要的是
    libboost_date_time-vc141-mt-x64-1_69.lib
    动态库生成的是
    boost_date_time-vc141-mt-x64-1_69.lib
    boost_date_time-vc141-mt-x64-1_69.dll
    所以我们得改文件名字了。 修改lib文件名字!!!!!问题解决。
     
    最后的最后大家注意下自己的MT MD 这些运行库的方式。
     
    Something From:
     
    https://www.cnblogs.com/cuish/p/4175491.html
     https://blog.csdn.net/chengfzy/article/details/52295293 
     
    关于MT MD MDD MTD这些:https://www.jianshu.com/p/96d5c4aa403c
     
     



  • 相关阅读:
    【报错】ES报错找不到Gson类
    【报错】Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    【JUC】AtomicInteger源码
    【Netty】Netty服务启动源码
    【Netty】Netty实现简单RPC
    【Netty】心跳机制
    【Netty】Netty模型
    【Netty】Reactor模型
    C# 好狂的多线程呀
    select使用
  • 原文地址:https://www.cnblogs.com/132818Creator/p/10949571.html
Copyright © 2020-2023  润新知