【问题标题】:Compiling from Visual Studio 2012 to g++?从 Visual Studio 2012 编译到 g++?
【发布时间】:2014-03-21 06:57:24
【问题描述】:

我有一个在 Visual Studio 2012 中编译的 c++ 程序。它包含 boost 库。现在,我想使用 g++ 编译器编译它。我必须注意哪些事项?很可能会在随机位置默默地破坏我的代码。

例如,我一直假设 long 是 4 个字节购买 g++ 将其视为 8 个字节。仅此一项,我就需要进行一些更改。

以及要使用哪个版本的 gcc,4.7.3、4.6.4 或 4.8.2?

【问题讨论】:

  • 许多你知道的事情可能需要重新审视。这里不是列举 MSVC 用户流行的错误信念的好地方。

标签: c++ visual-studio-2012 gcc g++


【解决方案1】:

如果您在不使用特定库的情况下编写了有效且良好的 C++ 代码,您应该什么都不知道。

【讨论】:

    【解决方案2】:

    您必须牢记的一些事情。这份清单并不全面,但是当我阅读您的问题时,我想到的就是这些。

    1. pragma once :使用 g++ 时,应使用 #ifndef、#define 和 #endif 保护来保护文件包含。

    2. 包含标题:VS 2012 非常宽松,在包含标题时不会对正斜杠或反斜杠大惊小怪。 g++ 会严格执行。

    3. 如果您使用的是 Win32 线程/互斥锁,最好切换到 std::thread。如果你对线程使用 boost,你就可以了。

    您可以使用和摆脱的 gcc 版本取决于您对 C++11 功能的使用。 gcc 在实现 C++11 功能方面总是领先于微软,你应该也可以使用旧版本的 gcc。除非我了解您在代码中使用的 c++11 功能,否则我无法回答这个问题。可以肯定地说,更新版本的 gcc 肯定会支持 Vs 2012 中可用的内容。

    【讨论】:

    • Gcc(Gcc 的预编译器)也可以处理一次#pragma。 abouert / 或 \ 的事情是操作系统的事情。如果他仍然在 Windows 上:如果他需要 Thread 的特定于操作系统的东西,为什么不使用它?
    • 我使用 boost asio 库。除此之外,我不认为我使用 c++11 功能。
    • @deviantfan:不,标题中的/\ 的东西并不是真正的操作系统。预处理器处理它们,只是因为它需要处理-I 命令行参数。将\ 传递给操作系统确实是GCC 的决定。 IIRC,Visual C++ 将 \ 替换为 /,然后将其传递给 Windows。
    猜你喜欢
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多