linux - 如何在特定部分强制出现链接器错误

标签 linux gcc linker sections

我在 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"))) 的代码不在我的控制之下(所以我不能简单地用 #error 替换它在 .c 文件中),但是 gccld 命令行标志(以及构建过程)在我的控制之下。

gccld 是否有命令行标志或其他一些可以强制错误的技巧?我在手册页中找不到任何相关内容。

我的后备解决方案是解析生成的可执行文件(例如使用 objdump -x),如果 .custom 部分已到达最终可执行文件。

最佳答案

您可以使用链接描述文件丢弃 .custom 部分中的所有符号:

SECTIONS
{
    /DISCARD/ : { *(.custom) }
}

如果你真的想用一个错误来惩罚你的用户,而不是简单地丢弃符号,我想你可以改为使用链接描述文件 ASSERT ,它的大小为 .custom 部分是 0。不过,我认为您必须强制生成该部分才能使其正常工作。否则,它会给您一个该部分不存在的错误。

关于linux - 如何在特定部分强制出现链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222827/

相关文章:

linker - MinGW 链接器找不到 MPICH2 库

linux - 为什么这个 SED 命令不起作用?

c - 在我自己的过程中找到一个符号

c - p 在函数名 pwrite 和 pread 中代表什么?

c - 开发分布式系统时,GCC 工具链的哪些元素应该相同?

c++ - 当设置中/MT 时程序可以运行,但当/MD 时程序会失败

linux - 如何将 'tee' 的参数传递给 Bash 脚本?

c - 如何更改 makefile 以避免对数学库中函数的 undefined reference ?

c - GCC:编译不同文件夹中的文件

c++ - 对类模板的静态变量的 undefined reference