常见的错误集合解决方案(一)

常见的错误集合解决方案(一)

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文件了,在链接进去即可

未完待续...

以上内容如有错误或者需要补充的,请留言!

原创不易,转载请联系群主,注明出处。

原文发布于微信公众号 - 点云PCL(dianyunPCL)

原文发表时间:2019-09-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券