您的位置:首页 > 运维架构 > Linux

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位可移植性问题 -->设置成否
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: