2010-12-20 10 views
20

immer diese Fehlermeldung während C Kompilieren ++ Code:undefined reference to `__stack_chk_fail‘

undefined reference to `__stack_chk_fail' 

Optionen bereits versucht:

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

Detaillierte 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 war ich immer 10 ist solcher Fehler. Es wurde festgestellt, dass zwischen der gcc der vorkompilierten Bibliotheken, die ich verwende, und der gcc Version, die ich zur Kompilierung des Codes verwendet habe, eine Versionsabweichung aufgetreten ist. Aktualisiert gcc und jetzt bekomme ich nur 2 dieser Fehler.

Irgendwelche Hilfe, bitte?

Antwort

25

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

Ein paar Dinge in den Sinn kommen:

  1. -fno-Stack-Schutz hinzufügen, wenn die Verknüpfung. Dies stellt sicher, dass libssp verlinkt wird.
  2. manuell Link -lssp
  3. Machen Sie Ihre Dummy-Version von __stack_chk_fail (void) in einem eigenen Objektdatei und und fügen Sie diese .o-Datei auf Ihren Linker Befehl NACH libgurobi_C++. A. 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.
+0

1. Ich hatte -fno-Stack-Schutz hinzugefügt früher aber das hat nicht geholfen. 2. Vielen Dank, Hinzufügen von -LSSP hat funktioniert. 3. Vielen Dank! Diese Information war nützlich. Ich hatte das vergessen. – Akhil

+1

Froh, dass es gelöst hat. Hättest du während des Linkens den fno-stack-protector hinzugefügt? Vielleicht hat es die -lssp in die falsche Reihenfolge gebracht, wer weiß ... – gravitron

+1

Obwohl es kompiliert, wenn ich das Programm ausführen, erhalte ich diesen Fehler: . ./jetAlloc: Fehler beim Laden freigegebener Bibliotheken: libssp.so.0: kann nicht freigegebene Objektdatei: Keine solche Datei oder Verzeichnis – Akhil

0

https://wiki.ubuntu.com/ToolChain/CompilerFlags

sagt:

„In der Regel ist dies ein Ergebnis von während eines Build ld statt gcc Aufruf Verknüpfung auszuführen“

Dies ist, was ich auf, wenn das Makefile geändert von libjpeg manuell. Verwenden Sie gcc anstelle von ld löste das Problem.

0

In Gentoo hatte ich das gleiche Problem und ich löste die Erstellung von 2 Dateien. Die enthalten zunächst die Option entstehen und weitergegeben gcc analysiert werden:

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

Und das zweite sagt, welches Paket diese Einstellungen verwenden soll:

/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