【发布时间】:2014-01-19 21:20:37
【问题描述】:
我在 Linux 上使用 GCC 和 GNU Binutils,为 i386 Linux 编译和链接代码。我想禁止名为 .custom 的部分,因此我希望以下内容因编译错误或链接错误而失败:
__attribute__((section(".custom"))) int foo() { return 42; }
int main(void) { return 0; }
,但是这个应该像往常一样成功:
__attribute__((section(".other" ))) int foo() { return 42; }
int main(void) { return 0; }
__attribute__((section(".custom"))) 的代码不在我的控制之下(所以我不能简单地将其替换为 .c 文件中的 #error),而是 gcc 和 ld 命令行标志(和构建过程)在我的控制之下。
是否有gcc 或ld 的命令行标志或其他可以强制错误的技巧?我在手册页中找不到任何相关内容。
我的后备解决方案是解析生成的可执行文件(例如,使用 objdump -x),如果 .custom 部分已生成最终可执行文件,则会失败并显示错误消息。
【问题讨论】: