前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常见的错误集合解决方案(一)

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

作者头像
点云PCL博主
发布2019-09-19 17:43:13
1.5K0
发布2019-09-19 17:43:13
举报
文章被收录于专栏:点云PCL点云PCL

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

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

未完待续...

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点云PCL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档