gcc10 compile c++ code and link to libraries compiled by gcc11

Viewed 1877

I am using gcc10 for my code. My system installed the official libraries compiled by gcc11.

OS:archlinux
compiler: gcc-10

Archlinux updated their official compiler to gcc-11.

When I use gcc10 to compile my code and link to the libraries compiled by gcc11, it shows the following error message:

/usr/bin/ld: /usr/lib/libQt5Core.so.5.15.2: undefined reference to `std::__exception_ptr::exception_ptr::_M_release()@CXXABI_1.3.13'
/usr/bin/ld: /usr/lib/libQt5Widgets.so.5.15.2: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
/usr/bin/ld: /usr/lib/libQt5Core.so.5.15.2: undefined reference to `std::__exception_ptr::exception_ptr::_M_addref()@CXXABI_1.3.13'

It seems related to stdc++ libraries. What should I do?

------------------------------------------

I tried to use gcc11 to compile everything including the libraries. It is fine to compile the libraries that I need.

When I compile my code, it shows the error messages:

/usr/bin/ld: CMakeFiles/depth_camera_slam.dir/main.cpp.o: in function `__gnu_cxx::new_allocator<double*>::allocate(unsigned long, void const*)':
/usr/include/c++/11.1.0/ext/new_allocator.h:110: undefined reference to `std::__throw_bad_array_new_length()'
/usr/bin/ld: CMakeFiles/depth_camera_slam.dir/main.cpp.o: in function `__gnu_cxx::new_allocator<ceres::Grid2D<double, 1, true, true> >::allocate(unsigned long, void const*)':
/usr/include/c++/11.1.0/ext/new_allocator.h:110: undefined reference to `std::__throw_bad_array_new_length()'
/usr/bin/ld: CMakeFiles/depth_camera_slam.dir/main.cpp.o: in function `__gnu_cxx::new_allocator<ceres::BiCubicInterpolator<ceres::Grid2D<double, 1, true, true> > >::allocate(unsigned long, void const*)':
/usr/include/c++/11.1.0/ext/new_allocator.h:110: undefined reference to `std::__throw_bad_array_new_length()'
/usr/bin/ld: CMakeFiles/depth_camera_slam.dir/main.cpp.o: in function `__gnu_cxx::new_allocator<std::shared_ptr<Keyframe> >::allocate(unsigned long, void const*)':
/usr/include/c++/11.1.0/ext/new_allocator.h:110: undefined reference to `std::__throw_bad_array_new_length()'
/usr/bin/ld: CMakeFiles/depth_camera_slam.dir/main.cpp.o: in function `__gnu_cxx::new_allocator<unsigned long>::allocate(unsigned long, void const*)':
/usr/include/c++/11.1.0/ext/new_allocator.h:110: undefined reference to `std::__throw_bad_array_new_length()'
/usr/bin/ld: CMakeFiles/depth_camera_slam.dir/main.cpp.o:/usr/include/c++/11.1.0/ext/new_allocator.h:110: more undefined references to `std::__throw_bad_array_new_length()' follow
/usr/bin/ld: /usr/local/lib/libopencv_core.so.3.4.15: undefined reference to `std::__exception_ptr::exception_ptr::_M_release()@CXXABI_1.3.13'
/usr/bin/ld: /usr/lib/libvtkRenderingCore.so.1: undefined reference to `std::__istream_extract(std::istream&, char*, long)@GLIBCXX_3.4.29'
/usr/bin/ld: ../lib/libdataset_inputstream.so: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
/usr/bin/ld: /usr/local/lib/libopencv_core.so.3.4.15: undefined reference to `std::__exception_ptr::exception_ptr::_M_addref()@CXXABI_1.3.13'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/depth_camera_slam.dir/build.make:351: ../bin/depth_camera_slam] Error 1
make[1]: *** [CMakeFiles/Makefile2:804: CMakeFiles/depth_camera_slam.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

Is it related to stdc++ lib? or my compiler? I think my code is fine because I can compile it on my old machine (archlinux but the compiler is gcc10). -------------------------------------

I can't uninstall gcc10 because I am using CUDA11 which depends on gcc10.

0 Answers
Related