Linux C++代码移植到Windows要解决的问题

来源:互联网 发布:网络攻击防御 编辑:程序博客网 时间:2024/04/27 19:54

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位可移植性问题 -->设置成否

原创粉丝点击