Linux下Visual Studio与gcc的C++兼容性
Posted
技术标签:
【中文标题】Linux下Visual Studio与gcc的C++兼容性【英文标题】:C++ compatibility between Visual Studio and gcc under Linux 【发布时间】:2011-03-24 11:05:01 【问题描述】:我正在尝试在 Linux 下使用 QtCreator 构建一个用 VS 2008 编写的项目,但出现大量错误:
/home/ga/dev/CppGroup/MonteCarlo/main.cpp:1: error: stray ‘\377’ in program
/home/ga/dev/CppGroup/MonteCarlo/main.cpp:1: error: stray ‘\376’ in program
/home/ga/dev/CppGroup/MonteCarlo/main.cpp:1: error: stray ‘#’ in program
/home/ga/dev/CppGroup/MonteCarlo/main.cpp:1: warning: null character(s) ignored
等等
这是否意味着编译器无法正确处理 unicode?我该如何解决?
【问题讨论】:
【参考方案1】:这看起来像是小端 UTF-16 的 UTF-16 BOM。您需要确保文件保存为 UTF-8 或通过iconv -f UTF-16LE -t UTF8 myfile
手动转换。
【讨论】:
但是我想让它同时在两个系统上编译...我可以配置VS将它保存为utf-8吗? @Grzenio:请参阅this question 或this question 了解如何设置它,this question 了解如何批量更改所有项目文件。 是否可以在项目或解决方案级别进行配置?【参考方案2】:确保文件以 UTF-8 编码。使用允许您选择文件编码(例如 gedit 或 notepad++)的文本编辑器打开它并进行转换。我之前也遇到过类似的问题,但 UTF-8 文件可以正常工作(其他编码,如 UTF-16 将无法正常工作)。
编辑:不要将您的资源脚本(如果有的话)转换为 UTF-8。资源编译器将无法读取它(至少在使用 MSVC 2008 时)。
【讨论】:
但是我想让它同时在两个系统上编译...我可以配置VS保存为utf-8吗? 如果文件已经是 UTF-8,MSVC 将保留 UTF-8,它也可以使用它们。【参考方案3】:可能是您的文件使用 windows 编码,带有 ^M、\r\n...等字符 您是否尝试在编译之前在源文件上运行 dos2unix?
【讨论】:
Windows 换行符非常适合 GCC。【参考方案4】:我想我在 unicode 文件中看到了“流浪...”。
您可以配置编辑器或控制台(或两者)的编码设置来修复它。
【讨论】:
以上是关于Linux下Visual Studio与gcc的C++兼容性的主要内容,如果未能解决你的问题,请参考以下文章
C++ 与 gcc 和 Visual Studio 不同的编译错误,“在此上下文中”
如何使用 gcc 和 Visual Studio 的“静态链接”和“动态链接”构建 C/C++ 程序?
《软件工具》手把手教你使用Visual Studio Code开发C/C++(Linux)