c++ gcc - undefinierter Verweis auf `__stack_chk_fail '




undefined reference (4)

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.

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?


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

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

sagt:

"Normalerweise ist dies ein Ergebnis des Aufrufs von ld anstelle von gcc während eines Builds, um eine Verbindung herzustellen"

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


Angesichts der Strenge, die Sie mit Ihrer Analyse gezeigt haben, bin ich von den bisherigen Ergebnissen überrascht. Ich stelle dies als eine "Antwort" dar, aber nur, weil es für einen Kommentar zu lang ist und eine Möglichkeit bietet (obwohl ich erwarte, dass Sie darüber nachgedacht haben).

Ich hätte gedacht, dass der numpy / python-Ansatz nicht viel Aufwand für eine Matrix von angemessener Komplexität verursachen würde, da mit steigender Komplexität der Anteil, an dem python teilnimmt, klein sein sollte. Ich interessiere mich mehr für die Ergebnisse auf der rechten Seite des Graphen, aber Diskrepanzen in Größenordnungen, die dort gezeigt werden, würden stören.

Ich frage mich, ob Sie die besten Algorithmen verwenden, die numpy nutzen kann. Aus dem Kompilierungshandbuch für Linux:

"Build FFTW (3.1.2): SciPy-Versionen> = 0.7 und Numpy> = 1.2: Aufgrund von Lizenz-, Konfigurations- und Wartungsproblemen wurde die Unterstützung für FFTW in Versionen von SciPy> = 0.7 und NumPy> = 1.2 entfernt Eine eingebaute Version von fftpack.Es gibt mehrere Möglichkeiten, um die Geschwindigkeit von FFTW zu nutzen, wenn es für Ihre Analyse notwendig ist.Umgrade auf eine Numpy / Scipy-Version, die Unterstützung beinhaltet.Installieren oder erstellen Sie Ihren eigenen Wrapper von FFTW. http://developer.berlios.de/projects/pyfftw/ als nicht http://developer.berlios.de/projects/pyfftw/ Beispiel. "

Hast du numpy mit mkl kompiliert? ( http://software.intel.com/en-us/articles/intel-mkl/ ). Wenn Sie auf Linux laufen, finden Sie die Anweisungen zum kompilieren von numpy mit mkl hier: http://www.scipy.org/Installing_SciPy/Linux#head-7ce43956a69ec51c6f2cedd894a4715d5bfff974 (trotz URL). Der Schlüssel ist:

[mkl]
library_dirs = /opt/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64
include_dirs = /opt/intel/composer_xe_2011_sp1.6.233/mkl/include
mkl_libs = mkl_intel_lp64,mkl_intel_thread,mkl_core 

Wenn Sie unter Windows sind, können Sie eine kompilierte Binärdatei mit mkl erhalten (und auch pyfftw und viele andere verwandte Algorithmen erhalten) unter: http://www.lfd.uci.edu/~gohlke/pythonlibs/ , mit a Dank an Christoph Gohlke im Labor für Fluoreszenzdynamik, UC Irvine.

Achtung, in beiden Fällen gibt es viele Lizenzprobleme und so weiter, aber die Intel-Seite erklärt dies. Auch hier stelle ich mir vor, dass Sie darüber nachgedacht haben, aber wenn Sie die Lizenzanforderungen erfüllen (was auf Linux sehr einfach ist), würde dies den anständigen Teil im Vergleich zu einem einfachen automatischen Build ohne FFTW erheblich beschleunigen. Ich werde interessiert sein, diesem Thema zu folgen und zu sehen, was andere denken. Ungeachtet, ausgezeichnete Strenge und ausgezeichnete Frage. Danke für das Posten.





c++ gcc undefined-reference