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:\Boost\boost_1_57_0\bin\vc10"     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:\Boost\boost_1_57_0\bin\vc10"     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
 
 



 

posted @ 2019-05-30 15:01  HappyCoder_1  阅读(6718)  评论(0编辑  收藏  举报