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

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

 

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

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

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

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

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

   加入lib库的路径:.net

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

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

 

三、debug编译经过,release就是编不过,提示错误:没法打开文件“libboost_filesystem-vc140-mt-1_58.libdebug

   

     这种问题,首先你要确认下,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
相关文章
相关标签/搜索