最近在用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
 
 

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

  1. 编译问题解决:LINK : fatal error LNK1104: 无法打开文件“*.dll”

    一.引言 编译项目的时候,总会遇到些奇怪的问题,比如说以下这种: LINK : fatal error LNK1104: 无法打开文件“..\bin\ICPRegistration.dll” 我在编译 ...

  2. 编译Release版本小技巧

    原文:编译Release版本小技巧 由于项目中要部署的App有很多,每次发布一个版本后都有一堆垃圾文件,部署在众多的终端机上不注意的话十分容易搞错.记得以前在VS中是可以设置下不生成vhost和pdb ...

  3. VS 2017 VC++项目出现 LNK1104 无法打开文件"libcmtd.lib" 的解决方法

    今天用VS 2017编译一个以前的VC++动态库项目,出现了一个链接器问题: LNK1104 无法打开文件"libcmtd.lib" . 操作系统版本为:Windows 10 18 ...

  4. VS2017Release+x64失败,LNK1104,无法打开文件"msvcprt.lib"

    采用VS2017+Qt5.10联合开发环境建立开发,将Qt的库包含到VS中使用VS2017的Debug+x64模式调试程序,通过并出现对应的EXE应用程序! 但是转换到Release+x64模式出现问 ...

  5. fatal error LNK1104: 无法打开文件“libc.lib”的问题 (转)

    今天,编译程序的时候,意外遇到了一个错误,就是VS2008一直提示:fatal error LNK1104: 无法打开文件“libc.lib”,后来在网上查找了很多资料,终于知道原因了... 如果将用 ...

  6. 转载: LINK : fatal error LNK1104: 无法打开文件“mfc71.lib”的原因又一例

    转载地址:http://blog.csdn.net/mxclxp/article/details/8196142 LINK : fatal error LNK1104: 无法打开文件“mfc71.li ...

  7. LINK : fatal error LNK1104: 无法打开文件“ucrtd.lib”

    先说解决方案: 选中项目->右键->属性->常规 -->Windows SDK     改成当前系统的SDK版本,我这边是10.0.15063.0,重新生成即可 下载cefsh ...

  8. 【OpenGL】LNK1104 无法打开文件“freeglutd.lib”

    新建的OpenGL程序编译时经常会出现[LNK1104 无法打开文件“freeglutd.lib”]问题,如果freeglutd.lib确实放到了正确的路径下,通常可以通过添加“NDEBUG”宏定义解 ...

  9. fatal error LNK1104: 无法打开文件“lua51.lib”

    今天学习C++与Lua通信,遇到了问题:fatal error LNK1104: 无法打开文件"lua51.lib" 开发环境: VS2012 cocos版本:cocos2d-x- ...

随机推荐

  1. GPU 、APU、CUDA、TPU、FPGA介绍

    购买显卡主要关注:显存.带宽和浮点运算数量   GPU :图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心.视觉处理器.显示芯片,是一种专门在个人电脑. ...

  2. OpenStack(四)——使用Kolla部署OpenStack多节点云

    (1).实验环境 主机名 IP地址 角色 内存 网卡 CPU 磁盘 OpenStack-con 192.168.128.110 controller(控制) 8G 桥接网卡ens32和ens33 4核 ...

  3. [前端] VUE基础 (9) (element-ui、axios、Vuex)

    一.element-ui的使用 官方网页:https://element.eleme.cn/#/zh-CN 1.安装element-ui (venv) D:\pycharm_workspace\vue ...

  4. 2019.9.30极限测试 04.JAVA语言课堂测试试卷-极限测试

    题目存储在上传的文件当中. 代码实现 Subway 类: package ClassroomTest; public class Subway { private String railway; pr ...

  5. [转]java 的HashMap底层数据结构

    java 的HashMap底层数据结构   HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-v ...

  6. py02_04:三元运算法

    a if a > b else c     #  a>b 成立,则为真,如果a>b为假,则返回c

  7. idea创建远程分支

    1.先从远程拉取一个完整的分支,master或dev 2.新建一个分支,new,新建的同时checkout 出来 3.把新建的分支push到远程 4.如果新建完分支后写代码了,需要先把代码提交然后一起 ...

  8. C语言-字、半字、内存位宽相关

    1.32位系统:32位系统指的是32位数据线,但是一般地址线也是32位,这个地址线32位决定了内存地址只能有32位二进制,所以逻辑上的大小为2的32次方.内存限制就为4G.实际上32位系统中可用的内存 ...

  9. Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码

    通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...

  10. FJ的字符串-简单递归

    FJ的字符串-简单递归 问题描述FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = “ABACABADABACABA” … … 你能找出其 ...