Downgrade von gcc / g ++ nach dem Upgrade; Compiler-Fehler

1583
tir38

Ich habe gerade gcc / g ++ von 4.4 auf 4.8 aktualisiert (über diese Methode. Wie kann ich gcc auf die neueste Version in Ubuntu 10.04 aktualisieren? ). Mir wurde klar, dass 4.8 einen großen Teil meines Codes brechen wird, und jetzt möchte ich auf 4.4 zurückkehren. Durch sudo-apt-get, das 4.8 entfernt und meine Update-Alternativen gelöscht / geändert hat, sollte ich wieder "normal" sein. Ich habe jedoch einen Compiler-Fehler:

scons: done reading SConscript files. scons: Building targets ... g++ -o src/common/Obstacle/obj/libObstacle.so -Wl,-rpath=lib -Wl,-rpath=/usr/local/lib -Wl,-E -pthread -shared src/common/Obstacle/obj/Obstacle.os -Llib -L/usr/local/lib -lGL -lglut -lWorldModel g++ -o src/common/MotionCommands/obj/libMotionCommands.so -Wl,-rpath=lib -Wl,-rpath=/usr/local/lib -Wl,-E -pthread -shared src/common/MotionCommands/obj/MotionCommands.os -Llib -L/usr/local/lib -lWorldModel g++ -o src/xyz/AlignTool/obj/AlignTool -Wl,-rpath=lib -Wl,-rpath=/usr/local/lib -Wl,-E -pthread src/xyz/AlignTool/obj/AlignTool.o -Llib -L/usr/local/lib -ltask -lboost_serialization -lrecgeometry -lMovingTarget /usr/bin/ld: src/xyz/AlignTool/obj/AlignTool.o: undefined reference to symbol 'ConfigSection::getCValue(unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool&, bool)' /usr/bin/ld: note: 'ConfigSection::getCValue(unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool&, bool)' is defined in DSO lib/libconfig.so so try adding it to the linker command line lib/libconfig.so: could not read symbols: Invalid operation collect2: ld returned 1 exit status g++ -o src/behaviors/obj/DK.o -c -fPIC -Wall -Winit-self -O3 -g3 -pthread -Isrc/common -Ibackground/include -I/usr/lib/ruby/1.8/x86_64-linux src/behaviors/DK.cc scons: *** [src/xyz/AlignTool/obj/AlignTool] Error 1 scons: building terminated because of errors. 

Was vermisse ich? Was hat sich geändert? Wie kann ich das beheben? (Ich bin nicht sicher, wie vage diese Frage ist, also, wenn Sie mehr Informationen benötigen, lehme ich wissen).

1

2 Antworten auf die Frage

1
tir38

Anscheinend ist das gar nicht so einfach. Ich musste es einfach aufsaugen und Ubuntu neu einspielen.

0
Steve

Eigentlich mache ich das ständig in Ubuntu 10.04 und es scheint gut zu funktionieren. Zwischen den Builds mache ich einen wirklich sauberen Build und lösche alle Artefakte, so dass es keine Mischung von Dateien gibt, die mit und ohne den neueren Compiler kompiliert werden.

Ich installiere den neueren Compiler mit:

sudo apt-get install g ++ - 4,8 gcc-4,8

und deinstallieren Sie es mit

sudo apt-get autoremove g ++ - 4,8 gcc-4,8 libstdc ++ - 4,8-dev

Führen Sie die Deinstallation jedoch dreimal hintereinander aus, um alle installierten Abhängigkeiten zu beseitigen.

Ich verwende jedoch die neueren Binutils (2.22-4ubuntu1 ~ 10.04.1) sowohl mit GCC 4.4.3 als auch mit GCC 4.8.0 und die neueren Binutils erfordern möglicherweise eine explizitere Verknüpfung als die alten. Ich würde damit beginnen, nur binutils zu aktualisieren und alles in 4.4.x zu kompilieren.

4.8.x und höher fängt eine Menge weiterer Code-Probleme auf, daher würde ich zumindest den 4.4.x-Code überprüfen, wenn Sie beim älteren Compiler bleiben müssen.