Scientific Linux 컴퓨터에 GCC 6.2.0을 수동으로 설치했습니다. 는 C++ 응용 프로그램의 컴파일은 잘 보이지만 우리는 우리가 double ABI issue 알고 있지만 -D_GLIBCXX_USE_CXX11_ABI=0
로 컴파일하는 것은 차이가 없습니다 시간GCC 6.2.0과의 CXX11 정의되지 않은 참조
file.cpp:(.text+0x16cb): undefined reference to `std::__cxx11::list<void*, std::allocator<void*> >::list(std::__cxx11::list<void*, std::allocator<void*> > const&)'
연결에 CXX11에 undefined references
많이 얻을. 어떤 다른 옵션이 있습니까?
UPDATE
CMAKE 구성은 다음과 같다 :
-- The C compiler identification is GNU 6.2.0
-- The CXX compiler identification is GNU 6.2.0
-- Check for working C compiler: /opt/GNU/gcc-6.2.0/bin/gcc
-- Check for working C compiler: /opt/GNU/gcc-6.2.0/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /opt/GNU/gcc-6.2.0/bin/g++
-- Check for working CXX compiler: /opt/GNU/gcc-6.2.0/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
이 (실제로 실패) file.cpp
gcc-6.2.0/bin/g++ -O3 -fopenmp -DNO_HDF5 -D_GLIBCXX_USE_CXX11_ABI=0 -I./include -I/opt/mpich/3.2/include -o file.cpp.o -c file.cpp
와 연결
컴파일 라인 인gcc-6.2.0/bin/g++ -O3 -fopenmp -DNO_HDF5 -D_GLIBCXX_USE_CXX11_ABI=0 main.cpp.o -o ASTEP -rdynamic libMainASTEPlib.a -lhdf5_hl -lhdf5 -lz -lm -lhdf5_hl -lhdf5 -lz -lm /opt/mpich/3.2/lib/libmpicxx.so /opt/mpich/3.2/lib/libmpi.so -Wl,-rpath,/opt/mpich/3.2/lib
또한, MPICH 3.2은 새로운 컴파일러 (GCC 6.2.0)로 구축 된
개체가 여전히std::__cxx11::list
에 대한 참조를 가지고 왜이
-D_GLIBCXX_USE_CXX11ABI=0
컴파일 때 매크로가있는 다음 경우를 제외하고 내가 이해하지 못하는
* 귀하의 프로그램을 어떻게 연결하고 있습니까? 'ld'로? 'gcc'로? 'g ++ '로? –
오브젝트 파일을 제거하고 다시 컴파일하십시오. –
gcc를 설치할 때 gcc는 실제로 gcc를 밀어 넣는 위치와 상관없이 라이브러리가/usr/lib (64)에 설치 될 것이라고 가정합니다. 따라서 귀하의 코드는 시스템의 표준 라이브러리와 연결됩니다. 안타깝게도 gcc의 설정을 망치는 방법에 대한 자세한 내용을 잊어 버렸습니다. gcc를 설치 한 곳의 라이브러리와 올바르게 연결되도록 설정하는 것이 좋습니다. 10 년 전에했던 것처럼 당신은 그것을 알아 내야 할 것입니다 ... 만약 내가 그 모든 것을 기억한다면, 나는 대답을 게시 할 것입니다. –