常见的错误集合解决方案(一)
常见的错误集合解决方案(一)
No.1
提示错误

'Microsoft.VC90.CRT,version="9.0.21022.8"

把Microsoft.NET Framework 3.5.1下面的全部勾选上。
No.2
解决Qt Designer设计的图标但是VS生成不显示

问题描述:
在Qt designer中为菜单栏和工具栏设计的图标,但是在VS中生成得到的界面却没有图标
问题解决:
需要在VS中导入自己设计的资源文件,如下:
Source Files右键添加现有项,将自己的资源文件导入进去,然后就看到如下:

No.3
在QtDesigner中添加QVTKWidget,显示三维点云窗口

将下图的文件

复制到

进入Qt designer
点帮助->关于插件->刷新
QVTK就出来了

No.4
error LNK2038: 检测
到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2

使用VS2013版本引用外部的lib进行编译时候提示:
错误25 error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”(jrtplibSend.obj 中)
F:\jrtplibProjects\jrtplibSend\jrtplibSend\jrtplib.lib(rtpudpv6transmitter.obj) jrtplibSend

产生这个问题的原因是当前工程是Debug版本,而引用的库文件时Release版本,只需要把当前的Debug模式改成Release模式就可以了,或者打开解决方案--》属性--》链接器--》输入--》附加依赖项中引用debug版本的lib文件名称。

同样,如果检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”
则说明是Release模式引用了Debug的库文件。这类问题在引用文件时要注意版本的匹配
借用他人的情况分析我遇到error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2” 错误的第二个原因
release下,在库版本匹配没有问题。
但是编译报错error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”。
原因是:我release下,工程设置中运行库中设置成了"多线程调试 DLL (/MDd)"。这个是设置应该是在debug下的设置,release下应该设置“多线程 DLL (/MD)”。

No.5
Qt的pro文件转化为vs的工程文件

引言
使用QtCreator创建的工程,工程文件是pro文件,但是在实际开发中,可能需要用到VS进行调试(VS在代码编辑以及调试方面都要优于QtCreator)或者个人喜好VS进行开发。可以使用以下的方法实现Pro文件转化为Vs的工程文件,并进行调试。
步骤
1.首先配置Qt和VS的环境变量
2.然后进入到工程目录,执行以下命令
qmake -tp vc xxx.pro
3.运行结束后,打开工程目录,后看到生成之后的工程文件,使用vs的编辑器进行打开并编译,有可能会出现链接错误(LNK2026 模块对于 SAFESEH 映像是不安全的),这个时候打开工程配置-链接-命令行,添加以下的代码。
/SAFESEH:NO
No.6
boost 链接出错无法打开libboost_thread-vc140-mt-sgd-1_64.lib

第一个链接说明,当选择什么样子的运行时库,程序在编译的时候,就会去调用相应编译时期指定的版本,比如s代表的是运行时静态库,gd代表的是调试模式,当出现无法打开上面的情况下,说明放在指定目录下的boost编译库,可能是动态库,跟目标的不一致,因此需要调整匹配上。
“多线程(/MT)”:release版本多线程静态库
需要使用 libboost_regex-vc90-mt-s- 1_44.lib
“多线程调试(/MTd)”:debug版本多线程静态程库
需要使用libboost_regex-vc90-mt-sgd-1_44.lib
“多线程 DLL(/MD)”:release版本多线程动态库
需要使用静态boost 库连接 libboost_regex-vc90-mt -1_44.lib
动态boost 库连接, 需要在引入库前加上“lib”,
运行需要带上对应的dll
boost_regex-vc90-mt-1_44.lib à在引入库前加上“lib” boost_regex-vc90-mt-1_44.dll
“多线程调试 DLL(/MDd)”:debug版本 多线程动态库
需要使用静态boost 库连接
libboost_regex-vc90-mt-gd-1_44.lib
动态boost 库连接, 需要在引入库前加上“lib”,
运行需要带上对应的dll
boost_regex-vc90-mt-gd-1_44.lib à 在引入库前加上“lib”
boost_regex-vc90-mt-gd-1_44.dll
http://www.cnblogs.com/bluedoctor/p/6236905.html
http://blog.csdn.net/xucuiping_/article/details/5979532
写在后面,看看这个方式能不能ok:
1、在官网下载boost源文件,然后编译,下载的目录下面有一个文件叫bootstrap.bat的批处理文件,双击执行然后就会生成一个文件bjam.exe
2、然后转到下载的目录下面执行下面的语句:
bjam address-model = 64
解释:=64表示编译的是64位的boost
=32表示编译的是32位的boost
3、然后执行后就会得到下面的截图:

4、关于在生成过程中缺失这样的文件的时候的解决办法
libboost_thread-vc141-mt-sgd-1_65_1.lib
其中的sgd表示的是debug版本多线程静态程库,然后我们去boost的lib文件夹下面去找这个lib文件,发现是没有的,那么这个时候就需要我们自己去编译这个lib文件了,下面说下如何编译:
win+r打开cmd窗口,进入编译目录,执行
bjam stage --toolset=msvc-14.0 --stagedir="D:\boost_1_65_1" link=shared runtime-link=shared threading=multi debug release
bjam stage --toolset=msvc-14.0 --stagedir="D:\boost_1_65_1" link=static runtime-link=static threading=multi debug release
说明:
1、不同toolset版本只需更改版本就行,比如msvc-14.1的14.1改为其他版本,如9.0
2、目录记得改为自己的boost目录,
运行后得到下面(这里我就运行了第二条,时间很久)

3、看下得到的lib文件是什么样子的:

然后就会得到缺失的什么sgd.lib文件了,在链接进去即可
未完待续...

目前微信交流群不断壮大,由于人数太多,目前有两个群,为了鼓励大家分享,我们希望大家能在学习的同时积极分享,将您的问题或者小总结投稿发到群主邮箱主邮箱dianyunpcl@163.com。
●文字来源 | 点云PCL资源组