在编译C ++代码时出现此错误:
undefined reference to `__stack_chk_fail'
已经尝试过选项:
详细错误:
/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个错误。
请帮忙吗?
答案 0 :(得分:30)
libgurobi_c ++。a是用-fno-stack-protector编译的(显然)。
有些事情会浮现在脑海中:
答案 1 :(得分:0)
https://wiki.ubuntu.com/ToolChain/CompilerFlags
表示:
“通常这是在构建期间调用ld而不是gcc来执行链接”
的结果这是我手动修改libjpeg的Makefile时遇到的。使用gcc而不是ld解决了这个问题。
答案 2 :(得分:0)
在gentoo中我遇到了同样的问题,我解决了创建2个文件的问题。第一个包含由emerge解析并传递给gcc的选项:
/etc/portage/env/nostackprotector.conf
CFLAGS="-fno-stack-protector -O2"
第二个告诉哪个包应该使用这个设置:
/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
答案 3 :(得分:0)
遇到了同样的问题:无效__stack_chk_fail(void)
实现的c ++代码在编译时显示多个undefined reference to __stack_chk_fail
错误。
我的解决方案是将__stack_chk_fail(void)
定义为extern "C"
:
extern "C" {
__stack_chk_fail(void)
{
...
}
}
这抑制了编译错误:)
希望有帮助!