【问题标题】:Conditional code depending on a gcc switch取决于 gcc 开关的条件代码
【发布时间】:2018-02-28 01:33:07
【问题描述】:

我想使用基于 gcc 开关的 #if 指令交叉编译特定的 32 位和 64 位代码。

我可以使用 GCC 设置的宏来代替使用 -D 开关设置宏吗?

我能否以某种方式选择 gcc 命令选项中使用的开关以在预处理器阶段对其进行测试?

到目前为止,我发现 -m64 在我的 64 位机器上定义

   __x86_64__

而 -m32 取消定义

   __i386__ __i486__ __i586__ __i686__

【问题讨论】:

    标签: c gcc macros c-preprocessor


    【解决方案1】:

    您可以使用来自<limits.h>INT_MAX 值。这是 C,因此独立于编译器。

    您还可以检查https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html 以根据编译器选项获取其他一些预定义的宏。

    总的来说,最近建议编写可移植的代码,同时使用if 来测试仅在特定架构上为真的条件。优化器将删除不需要的分支。

    【讨论】:

    • 交叉编译时这个值的相关性如何?
    • 这些值取决于目标(如类型和二进制代码)。宿主无所谓。标头也依赖于目标,如果您仔细观察,您会在普通标头中看到带有 arch 名称的 #ifdef(请参阅 stackoverflow.com/questions/152016/…)。注意:最近最好不要进行交叉编译,而是使用模拟器并从那里运行 gcc:第三方库的问题要少得多(通常他们的构建脚本不支持交叉编译)。
    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 2018-07-07
    • 1970-01-01
    • 2012-06-08
    • 2021-07-29
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多