首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义对`__stack_chk_fail‘的引用

未定义对`__stack_chk_fail‘的引用
EN

Stack Overflow用户
提问于 2010-12-21 02:49:10
回答 4查看 48.3K关注 0票数 35

编译C++代码时出现此错误:

代码语言:javascript
复制
undefined reference to `__stack_chk_fail'

已尝试的选项:

  1. 添加了-fno-栈保护器在编译时-没有工作,错误持续
  2. 在我的代码中添加了一个空__stack_chk_fail(空)的虚拟实现。仍然收到相同的错误。

详细错误:

代码语言:javascript
复制
/u/ac/alanger/gurobi/gurobi400/linux64/lib/libgurobi_c++.a(Env.o)(.text+0x1034): In function `GRBEnv::getPar/u/ac/alanger/gurobi/gurobi400/linux64/lib/libgurobi_c++.a(Env.o)(.text+0x1034): In function `GRBEnv::getParamInfo(GRB_StringParam, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
: undefined reference to `__stack_chk_fail'
amInfo(GRB_StringParam, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
: **undefined reference to `__stack_chk_fail'**

早些时候,我收到了10个这样的错误。我发现我正在使用的预编译库的gcc和我用来编译代码的gcc版本之间存在版本不匹配。更新了gcc,现在我只得到了2个这样的错误。

有什么需要帮忙的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-21 02:58:32

libgurobi_c++.a是使用-fno-stack-protector编译的(显然)。

脑海中浮现出几件事:

链接时添加-fstack-protector

  1. 。这将确保libssp在它自己的对象文件中获得linked.
  2. Manually链接和您的虚拟版本的__stack_chk_fail( -lssp
  3. Make ),并在 libgurobi_c++.a之后将此.o文件添加到您的链接器命令中。在链接过程中,libgurobi_c++.a.

/G++从左到右解析符号,因此尽管您的代码定义了该函数,但包含__stack_chk_fail符号的对象的副本需要位于libgurobi_c++.a.右侧的链接器行上

票数 38
EN

Stack Overflow用户

发布于 2015-04-15 15:20:35

在gentoo中,我遇到了同样的问题,我解决了创建2个文件的问题。第一个包含要由emerge解析并传递给gcc的选项:

代码语言:javascript
复制
/etc/portage/env/nostackprotector.conf
CFLAGS="-fno-stack-protector -O2"

第二个命令告诉哪个包应该使用此设置:

代码语言:javascript
复制
/etc/portage/package.env/nostackprotector
x11-libs/vte nostackprotector.conf
sys-libs/glibc nostackprotector.conf
www-client/chromium nostackprotector.conf
app-admin/sudo nostackprotector.conf
票数 1
EN

Stack Overflow用户

发布于 2020-04-02 21:54:57

刚刚遇到了同样的问题:在c++代码中使用了void __stack_chk_fail(void)的实现在编译时显示了几个undefined reference to __stack_chk_fail错误。

我的解决方案是将__stack_chk_fail(void)定义为extern "C"

代码语言:javascript
复制
extern "C" {
__stack_chk_fail(void)
{
...
}
}

这抑制了编译错误:)

希望它能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4492799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档