понизить gcc / g ++ после обновления; ошибка компилятора

1514
tir38

Я только что обновил gcc / g ++ с 4.4 до 4.8 (с помощью этого метода Как я могу обновить gcc до последней версии в Ubuntu 10.04? ). Я понял, что 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

2 ответа на вопрос

1
tir38

Видимо, это совсем не просто. Мне просто пришлось смириться с этим и переустановить Ubuntu.

0
Steve

На самом деле, я делаю это все время в Ubuntu 10.04, и, кажется, работает нормально. Между сборками я делаю действительно чистую сборку и удаляю все артефакты, чтобы не было сочетания файлов, скомпилированных с новым компилятором и без него.

Я устанавливаю новый компилятор, используя:

sudo apt-get установить g ++ - 4.8 gcc-4.8

и удалите его, используя

sudo apt-get autoremove 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, если вам нужно придерживаться более старого компилятора.

Похожие вопросы