CXX11不确定的参考文献6.2.0



我们已经在科学Linux机器上手动安装了GCC 6.2.0。C 应用程序的汇编似乎很好,但是在链接时间

时,我们得到了很多undefined references到CXX11
file.cpp:(.text+0x16cb): undefined reference to `std::__cxx11::list<void*, std::allocator<void*> >::list(std::__cxx11::list<void*, std::allocator<void*> > const&)'

我们知道双重ABI问题,但是使用-D_GLIBCXX_USE_CXX11_ABI=0编译没有区别。我们还有哪些其他选项?

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)

构建的

我不明白为什么您的对象使用-D_GLIBCXX_USE_CXX11ABI=0编译时,您的对象仍然对std::__cxx11::list有参考,除非然后将宏重新定义在标题/源文件中。您应该确保正确地将file.o对象放置在应该包含它的任何存档(并且任何旧版本肯定已经消失)中。话虽如此:

您可能需要针对GCC 6.2.0随附的libstdc 库链接,而不是该库的系统版本,该库似乎与较早的编译器相对应。

这可能需要使用-nostdlib,然后手动添加-L/(path)/gcc-6.2.0/lib -lstdc++ -lc或类似。

另外,您可以使用系统C 标头而不是GCC 6.2.0标头进行编译。然后,您还应该能够成功地链接到系统libstdc 库。在这种情况下,您需要-nostdinc++,然后需要-I/usr/include/c++/5(例如)。请注意,在这种情况下,-D_GLIBCXX_USE_CXX11_ABI=0将没有效果,也不需要。旧库没有双重ABI。

相关内容

  • 没有找到相关文章

最新更新