VS2003工程转VS2008工程与新建VS2008的Qt工程时遇到的问题及其解决方法

作者:reille

本博客网址:http://blog.csdn.net/reille/

本文内容概要:详细描述了VS2003工程(project)转VS2008工程与新建VS2008的Qt工程时遇到的问题及其解决方法。

———————————————————————————————————————————————————————————————————

1. VS2003工程(project)转VS2008工程时遇到的问题及其解决方法

1.1 error C3163: “_write”: 属性与以前的声明不一致

用VS2008直接打开VS2003的工程并按照向导把VS2003的工程进行了转换。初步编译时,出现问题如下:

      D:\Program Files\Microsoft Visual Studio 9.0\VC\include\io.h(322) : error C3163: “_write”: 属性与以前的声明不一致

在网上搜索了下,有error C3163,但不是说的_write而是说的vsprintf问题,所以怎么整都不行,后面根据自己的理解,意思是冲突,所以我就把把D:\Program Files\Microsoft Visual Studio 9.0\VC\include\io.h这个文件中的第322行注释掉,再编译不再出现这个问题。

此外,编译中还出现了“open:重载不明确”的问题,也是把io.h文件中的第316行注释掉即可。

1.2 否忘记了向源中添加“#include "stdafx.h"”?

解决方法:选中方案,右键—>属性—>C/C++—>预编译头—>创建使用预编译头—>不使用

转的时候会出现这个问题,而且记得以前用VS2003新建工程时“创建使用预编译头”就是使用的。用VS2008新建的Qt工程没有这个问题。

1.3 把一个VC6的工程转换为VS2008的工程后,编译找不到而且不能升级vc90.pdb文件的问题解决方法

(以下摘自网上,而且解决方法是可行的:)

问题描述:
1>e:\vcomh264net\vcomh\vcomh264net2.0 1.0.25 av\video\videoproc.cpp : error C2471: cannot update program database 'e:\vcomh264net\vcomh264net2.0 1.0.25 2008\vcomh264net2.0 1.0.25 av\debug\vc90.pdb'
1>e:\vcomh264net\vcomh\vcomh264net2.0 1.0.25 av\video\videoproc.cpp : fatal error C1083: Cannot open program database file: 'e:\vcomh264net\vcomh264net2.0 1.0.25 2008\vcomh264net2.0 1.0.25 av\debug\vc90.pdb': No such file or directory

为什么我把一个VC6的工程转换为VS2008的工程后,编译总是出现找不到而且不能升级vc90.pdb文件的问题。重新编译了也不行。
从VC6直接跳到VS2008

这个vs2008一个著名的bug。详情可以参见https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=309462

官方现有解决方案如下:

I have found an alternate way for the time beging to avoid C2471 error but it works only in the case of successful release build.
for this click Build menu than Configuration manager than create a new setting from release settings. Change following things in your project settings as (下面的就是解决方法,本人试过,可行):
        C\C++ | General | Debug Information format | C7 Compatible (/Z7)
        C\C++ | Code Generation | Enable String Pooling | Yes (/GF)
        Linker | General Debug Info | Yes (/DEBUG)

after these settings. Rebuild your application. I'm sure you will be able to resolve the pdb updation issue if it is really not hampering your other settings. Hope it will be helpful to you.

1.4 提示fatal error You have included some C++/C library header files with _DEBUG defined and some with _DEBUG not defined. This will not work correctly. Please have _DEBUG set or clear consistently.

解决方法:
把use_ansi.h文件中的48、49、50行注释掉

1.5 1>FileFlash.obj : error LNK2019: 无法解析的外部符号

问题描述:__imp___CrtDbgReportW,该符号在函数 "public: char const & __thiscall std::_String_const_iterator,class std::allocator >::operator*(void)const " (??D?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDXZ) 中被引用

解决方法:

其实就是调正编译器选项参数:/MD、/MT 和 /LD

在vc2008中,在“配置属性-->C/C++-->代码生成-->运行时库”中将“多线程(/MT)”统一改为“多线程调试(/MTd)”即可。

2. VS2008新建Qt工程时遇到的问题及其解决方法

2.1 不能将参数1从“char *”转换为“LPCWSTR”与指向的类型无关;转换要求reinterpret_cast、C 样式转换或函数样式转换

解决方法:

找到网上说的解决方法:
字符集的问题。 UNICODE版的字符比ANSI 的内存占用大。 Win32程式中出现的标准定义 char 占一个字节,而 char 的UNICODE版被定义成这样: typedef unsigned short wchar_t ;占2个字节。所以有字符做参数的函数相应也用两个版本了。

解决方法一:

宽字节版函数中带有字符参数的都应该用宽字节版的字符参数,将字符串转换成宽字节很容易:比如将 "Application Error" 转换成UNICODE版,只需在它前面使用一个定义了的宏,如下: L"Application Error" ,或者TEXT("Application Error" )都可以 所以你应将 MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP); 改为: MessageBox(NULL,Temp,L"Application Error",MB_ICONSTOP);

解决方法二:

设置vs的project——>Properties——>Configuration Properties——>General——>Character Set——>Using Multi-Byte Character set


****但都没有用,最终的解决方法如下:

直接在参数1中加入强转换(LPCWSTR)。。。

这个问题,可能是工程设置问题,因为在另一个从vs2003工程转到vs008中的工程中,没有发现这个问题,而且如果强制转换的话,倒是反而出现问题,由此,可说明是工程设置问题,但一时没找到(找到再补上,或者有知道的告诉声)。

2.2 error c3861 :"_T":找不到标识符

解决方法:只需要添加 #include 即可

这个是在出现2.1问题时,根据解决方法一尝试的方法。

2.3 msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMTD.lib(typinfo.obj) 中定义

解决方法:忽略msvcrt.lib这个库文件

具体是:在属性—>配置属性—>链接器—>输入,在忽略特定库中添入:msvcrt.lib

这个解决方法可能不是最好,甚至也许在后续中会出现问题,但没办法,先编译通过再说。

你可能感兴趣的:(嵌入式linux应用编程)