c++ - template - undefined reference to read




undefinierter Verweis auf `__stack_chk_fail ' (2)

In Gentoo hatte ich das gleiche Problem und löste 2 Dateien. Die erste enthält die Option, die von emerge analysiert und an gcc übergeben wird:

/etc/portage/env/nostackprotector.conf
CFLAGS="-fno-stack-protector -O2"

Und die zweite sagt, welches Paket sollte diese Einstellungen verwenden:

/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

Erhalten dieses Fehlers beim Kompilieren von C ++ - Code:

undefined reference to `__stack_chk_fail'

Optionen bereits ausprobiert:

  1. hinzugefügt -fno-stack-protector beim kompilieren - hat nicht funktioniert, der Fehler bleibt bestehen
  2. eine Dummy-Implementierung von void __stack_chk_fail (void) in meinem Code hinzugefügt. Immer noch der gleiche Fehler.

Detaillierter Fehler:

/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'**

Früher hatte ich 10 solcher Fehler. Es wurde festgestellt, dass eine Versionsabweichung zwischen dem gcc der vorkompilierten Bibliotheken, die ich verwende, und der gcc Version, die ich zum Kompilieren des Codes verwendet habe, vorlag. gcc aktualisiert und jetzt gcc ich nur 2 dieser Fehler.

Irgendwelche Hilfe, bitte?


libgurobi_c ++. wurde mit -fno-stack-protector (offensichtlich) kompiliert.

Ein paar Dinge fallen mir ein:

  1. füge -fno-stack-protector beim Linken hinzu. Dies stellt sicher, dass libssp verlinkt wird.
  2. Verknüpfen Sie manuell -lssp
  3. Machen Sie Ihre Dummy-Version von __stack_chk_fail (void) in ihrer eigenen Objektdatei und fügen Sie diese .o-Datei Ihrem Linker-Befehl AFTER libgurobi_c ++ hinzu. GCC / G ++ löst Symbole während des Linkens von links nach rechts auf. Obwohl Ihr Code die Funktion definiert hat, muss eine Kopie eines Objekts, das das Symbol __stack_chk_fail enthält, in der Linkerzeile rechts von libgurobi_c ++ liegen.






undefined-reference