Linux C++代码移植到Windows要解决的问题
2013-05-15 16:18
218 查看
1、新建一个Win32项目,将所有源文件复制到项目文件夹中,并添加到工程中。
2、直接编译会出现错误:fatal error C1010: unexpected end of file while looking for precompiled header directive
致命错误C1010:在寻找预编译指示头文件时,文件未预期结束。
就是没有找到预编译指示信息的头文件。
问题一般发生在:通过添加文件的方式,添加了一些cpp文件到一个MFC的程序,但该cpp文件并不是MFC,而是标准的C++。
解决方案1: 右键单击项目工程中的cpp文件,在菜单Project->Settings->C/C++->Precompile Header,设置为第一项:Not using precompile headers。
解决方案2: 在.cpp文件开头添加包含文件stdafx.h。 #include"stdafx.h"
3、平台相关头文件宏定义
#ifdef WIN32
#include <time.h> //win32下的头文件
#endif
#ifdef UNIX
#include <sys/time.h> //Linux下的头文件
#endif
4、源代码文件格式问题
错误提示:error C4335: Mac file format detected: please convert the source file to either DOS or UNIX.
解决方案:将文本内容复制到Word,之后再创建一个TXT文件将Word的内容复制出来,即过滤掉格式,再将这个TXT文件替换原来的文件。
5、提示警告: warning C4996: 'sprintf' was declared deprecated 。
解决方案:
VC6:选项Project | Configuration Properties | C/C++ | Preprocessor | Preprocessor Definitions ,添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE两个宏。
VS2005 :项目属性---C/++ --->预处理定义下-》配置 -》下面添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE两个宏。
6、vs2005 类型错误:warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
查MSDN得: size_t unsigned integer Result of sizeof operator. STDDEF.H and other include files
出现C4276 warning是因为测试 32位代码的64位兼容性问题而出现的警告,由/WP64开关控制,默认是打开的。
size_t 是针对系统定制的一种数据类型,一般是整形,因为C/C++标准只定义一最低的位数,而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有定议le 这样的数据类型。
size_t 在32位系统上定义为 unsigned int,在64位系统上定义为 unsigned long.
STDDEF.H的内容
#ifndef _SIZE_T_DEFINED
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef _W64 unsigned int size_t;
#endif
#define _SIZE_T_DEFINED
#endif
解决方法:项目->属性->C/C++->检测64位可移植性问题 -->设置成否
2、直接编译会出现错误:fatal error C1010: unexpected end of file while looking for precompiled header directive
致命错误C1010:在寻找预编译指示头文件时,文件未预期结束。
就是没有找到预编译指示信息的头文件。
问题一般发生在:通过添加文件的方式,添加了一些cpp文件到一个MFC的程序,但该cpp文件并不是MFC,而是标准的C++。
解决方案1: 右键单击项目工程中的cpp文件,在菜单Project->Settings->C/C++->Precompile Header,设置为第一项:Not using precompile headers。
解决方案2: 在.cpp文件开头添加包含文件stdafx.h。 #include"stdafx.h"
3、平台相关头文件宏定义
#ifdef WIN32
#include <time.h> //win32下的头文件
#endif
#ifdef UNIX
#include <sys/time.h> //Linux下的头文件
#endif
4、源代码文件格式问题
错误提示:error C4335: Mac file format detected: please convert the source file to either DOS or UNIX.
解决方案:将文本内容复制到Word,之后再创建一个TXT文件将Word的内容复制出来,即过滤掉格式,再将这个TXT文件替换原来的文件。
5、提示警告: warning C4996: 'sprintf' was declared deprecated 。
解决方案:
VC6:选项Project | Configuration Properties | C/C++ | Preprocessor | Preprocessor Definitions ,添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE两个宏。
VS2005 :项目属性---C/++ --->预处理定义下-》配置 -》下面添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE两个宏。
6、vs2005 类型错误:warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
查MSDN得: size_t unsigned integer Result of sizeof operator. STDDEF.H and other include files
出现C4276 warning是因为测试 32位代码的64位兼容性问题而出现的警告,由/WP64开关控制,默认是打开的。
size_t 是针对系统定制的一种数据类型,一般是整形,因为C/C++标准只定义一最低的位数,而不是必需的固定位数。而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。为了提高代码的可移植性,就有定议le 这样的数据类型。
size_t 在32位系统上定义为 unsigned int,在64位系统上定义为 unsigned long.
STDDEF.H的内容
#ifndef _SIZE_T_DEFINED
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef _W64 unsigned int size_t;
#endif
#define _SIZE_T_DEFINED
#endif
解决方法:项目->属性->C/C++->检测64位可移植性问题 -->设置成否
相关文章推荐
- Linux C++代码移植到Windows要解决的问题
- windows下Qt代码移植到linux下的中文乱码问题解决
- Windows到Linux系统代码移植遇到的问题
- 解决git在Windows下的乱码问题--解决代码从git 拉下来之后中文乱码的问题
- 几个 Windows 到 Linux 的代码移植问题
- 关于"Windows不能在本地计算机启动Apache2.......并参考特定服务错误代码1"问题解决
- 解决Windows 2000不支持Response.CodePage代码的问题
- windows下使用git管理代码,其中出现的问题的解决办法
- 解决C#代码修改Windows注册表不生效的问题
- windows读取bmp格式图像代码移植linux;windows代码移植linux,数据类型不匹配我问题;
- 解决Windows 2000不支持Response.CodePage代码的问题
- 在Windows下如何解决Cocos2d-x中实例代码TestCpp找不到lib库文件的问题
- Windows下C++程序移植到Linux上的几个问题及解决方法
- windows到Linux代码移植遇到的问题
- ubuntu下使用eclipseCDT编写的C代码移植到AIX后乱码问题解决
- 在Windows如何解决下Cocos2d-x示例代码TestCpp我找不到lib问题库文件
- linux C++ 代码程序移植到 windows 上注意事项
- Ubuntu下的VirtualBox解决Windows移植问题
- 解决SQL Server本地Windows身份无法登录,错误代码18456问题