升级后降级 gcc/g++;编译器错误

升级后降级 gcc/g++;编译器错误

我刚刚将 gcc/g++ 从 4.4 升级到了 4.8(通过这种方法如何在 Ubuntu 10.04 中将 gcc 更新到最新版本?)。我意识到 4.8 会破坏我的很多代码,现在我想回滚到 4.4。通过 sudo-apt-get 删除 4.8 并清除/更改我的更新替代方案,我应该“恢复正常”。但是,我遇到了一些编译器错误:

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.

我遗漏了什么?有什么变化?我该如何解决这个问题?(我不确定这个问题有多模糊,所以如果你需要更多信息请告诉我)。

答案1

显然这并不容易。我只好忍耐并重新安装 Ubuntu。

答案2

实际上,我在 Ubuntu 10.04 中一直这样做,而且似乎效果很好。在构建之间,我会进行一次非常干净的构建并删除所有工件,这样就不会出现使用和未使用新编译器编译的文件混合的情况。

我使用以下方法安装较新的编译器:

sudo apt-get 安装 g++-4.8 gcc-4.8

并使用卸载它

sudo apt-get 自动删除 g++-4.8 gcc-4.8 libstdc++-4.8-dev

但连续运行卸载三次以摆脱所有已安装的依赖项。

但是,我正在使用较新的 binutils (2.22-4ubuntu1~10.04.1) 和 GCC 4.4.3 以及 GCC 4.8.0,较新的 binutils 可能需要比旧版本更明确的链接。我首先会升级 binutils 并让所有内容先在 4.4.x 中进行编译。

4.8.x 及更高版本可以捕获更多代码问题,因此如果您必须坚持使用旧版编译器,我会使用它来至少验证您的 4.4.x 代码。

相关内容