【问题标题】:What is the reason behind `stack_chk_fail` being undefined? [duplicate]`stack_chk_fail` 未定义的原因是什么? [复制]
【发布时间】:2021-01-26 04:57:19
【问题描述】:

AFAIK,__stack_chk_fail 是一个标准库函数,在检测到堆栈粉碎时运行。如果使用 -fstack-protector 编译二进制文件,它会像 printf 一样链接到它?那么undefined reference to symbol '__stack_chk_fail@@GLIBC_2.4' 怎么可能呢?

【问题讨论】:

  • “是标准库函数”。哪个标准定义它?
  • 它没有出现在 C18 标准文档中 - 编辑 - 标记了两种不同的语言!
  • 这绝对不是一个标准函数,但它是一个常见的扩展。
  • @n.'pronouns'm。 code.woboq.org/userspace/glibc/debug/stack_chk_fail.c.html那是什么功能呢?
  • @MarcoBonelli 它没有说明为什么它可能是未定义的。

标签: c++ c gcc linker glibc


【解决方案1】:

这是因为二进制文件没有与 glibc 链接(如果您使用 ld 作为链接器并忘记链接 libc,请改用 c++cc 链接,可能会发生这种情况),或者有版本不匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2017-06-21
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多