Вопрос по gcc, undefined-reference, c++ – А второй говорит, какой пакет должен использовать эти настройки:

24

ение этой ошибки при компиляции кода C ++:

undefined reference to `__stack_chk_fail'

Варианты уже опробованы:

добавлен -fno-stack-protector во время компиляции - не работает, ошибка сохраняетсядобавил фиктивную реализацию void __stack_chk_fail (void) в мой код. Все еще получаю ту же ошибку.

Подробная ошибка:

/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 из этих ошибок.

Любая помощь, пожалуйста?

Ваш Ответ

1   ответ
30

Несколько вещей приходят на ум:

добавлять-fno стек-протектор при связывании. Это гарантирует, что libssp будет связан.Ссылка вручную-lsspСделайте вашу фиктивную версию __stack_chk_fail (void) в своем собственном объектном файле и добавьте этот .o-файл в команду компоновщика.ПОСЛЕ libgurobi_c ++. а. GCC / G ++ разрешает символы слева направо во время компоновки, поэтому, несмотря на то, что в вашем коде определена функция, копия объекта, содержащего символ __stack_chk_fail, должна находиться в строке компоновщика справа от libgurobi_c ++. A.

Похожие вопросы