【问题标题】:Compiling C++ source for maximum portability编译 C++ 源代码以获得最大的可移植性
【发布时间】:2013-05-26 01:00:21
【问题描述】:

我使用 C++ 创建了一个独立的可执行文件,我希望它可以被尽可能多的人使用。在编译器选项方面,我能做些什么来确保这一点?我正在使用带有链接器选项-static-libgcc -static-libstdc++ 的 MinGW。我可能的用户将使用 Windows 7。

编辑:我已经尽可能地使我的源代码具有可移植性。 This webpage 提到参数 ANSI (-A) “为了最大的可移植性”。使其与 ANSI 兼容有什么影响?

【问题讨论】:

  • “可移植性”不仅仅意味着 Windows(7 或其他)。想想 Windows、Linux、Mac、x86、x86_64、ARM,……这只是它的开始!与您编写的代码相比,编译器选项非常少。

标签: c++ compiler-construction mingw gnu portability


【解决方案1】:

使用 g++,您可以使用很多警告标志。 -Wall 已经有帮助,但还有很多其他的,例如:

-Werror -Wall -Wextra -pedantic -std=gnu++0x -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Winit-self -Wlogical-op -Wmissing-include-dirs -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=1 -Wundef -Wno-unused -Wunused-variable -Wno-variadic-macros -Wno-括号 -Wno-unknown -pragmas -Wwrite-strings -Wswitch -fdiagnostics-show-option -Wnoexcept -Wold-style-cast -Wformat=2

它不会使您的代码与所有 C++ 编译器兼容,但是,一旦您尝试其他编译器,它将有助于减少必要的工作。

要查看所有这些警告标志,请查看 g++ 的手册页或信息页。

【讨论】:

  • -1 问题不在于源代码对不同编译器的可移植性,而是生成的二进制文件对不同计算机的可移植性。此外,尽管我缺乏空间和专业知识来列出具体的抱怨,但其中不少标志让人感觉不妥(冗余、可能有害、矛盾)。
最近更新 更多