hạ cấp gcc / g ++ sau khi nâng cấp; lỗi trình biên dịch


1

Tôi vừa nâng cấp gcc / g ++ từ 4.4 lên 4.8 (thông qua phương pháp này Làm cách nào để cập nhật gcc lên phiên bản mới nhất trong Ubuntu 10.04? ). Tôi nhận ra rằng 4.8 sẽ phá vỡ rất nhiều mã của tôi và bây giờ tôi muốn quay trở lại 4.4. Bằng cách sudo-apt-get loại bỏ 4.8 và xóa / thay đổi các lựa chọn thay thế cập nhật của tôi, tôi sẽ "trở lại bình thường". Tuy nhiên, tôi có một số lỗi trình biên dịch:

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.

Tôi đang thiếu gì? Những gì đã thay đổi? Làm thế nào tôi có thể sửa lỗi này? (Tôi không chắc câu hỏi này mơ hồ đến mức nào, vì vậy nếu bạn cần thêm thông tin tôi sẽ biết).

Câu trả lời:


1

Rõ ràng điều này không dễ dàng chút nào. Tôi chỉ cần mút nó và giới thiệu lại Ubuntu.


0

Trên thực tế, tôi làm điều này mọi lúc trong Ubuntu 10.04 và nó dường như hoạt động tốt. Giữa các bản dựng, tôi thực hiện một bản dựng thực sự sạch và xóa tất cả các tạo phẩm để không có sự pha trộn các tệp được biên dịch có và không có trình biên dịch mới hơn.

Tôi cài đặt trình biên dịch mới hơn bằng cách sử dụng:

sudo apt-get cài đặt g ++ - 4,8 gcc-4,8

và gỡ cài đặt nó bằng cách sử dụng

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

nhưng chạy gỡ cài đặt ba lần back-to-back để loại bỏ tất cả các phụ thuộc đã cài đặt.

Tuy nhiên, tôi đang sử dụng các binutils mới hơn (2.22-4ubfox1 ~ 10.04.1) với cả GCC 4.4.3 và GCC 4.8.0 và các binutils mới hơn có thể yêu cầu liên kết rõ ràng hơn so với cũ. Tôi sẽ bắt đầu bằng cách nâng cấp binutils và lấy mọi thứ để biên dịch trong 4.4.x trước.

4.8.x và cao hơn nắm bắt được nhiều vấn đề về mã hơn, vì vậy tôi sẽ sử dụng nó để xác nhận mã 4.4.x của mình nếu bạn phải gắn bó với trình biên dịch cũ hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.