Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Windows subsystem for Linux的Ubuntu 20下编译时未定义的引用_C++_Windows Subsystem For Linux - Fatal编程技术网

C++ 在Windows subsystem for Linux的Ubuntu 20下编译时未定义的引用

C++ 在Windows subsystem for Linux的Ubuntu 20下编译时未定义的引用,c++,windows-subsystem-for-linux,C++,Windows Subsystem For Linux,我正在尝试在Windows Linux子系统(WSL)中的Ubuntu20下构建pmp库()。在构建过程的一半以上,我得到了很多未定义的引用,比如: [59%]链接CXX可执行文件.././mconvert /usr/bin/ld:CMakeFiles/mconvert.dir/mconvert.cpp.o:在函数“std::_cxx11::basic_string::basic_string(char const*,std::allocator const&)[clone.isra.19]”中

我正在尝试在Windows Linux子系统(WSL)中的Ubuntu20下构建pmp库()。在构建过程的一半以上,我得到了很多未定义的引用,比如:

[59%]链接CXX可执行文件.././mconvert
/usr/bin/ld:CMakeFiles/mconvert.dir/mconvert.cpp.o:在函数“std::_cxx11::basic_string::basic_string(char const*,std::allocator const&)[clone.isra.19]”中:
mconvert.cpp:(.text+0x86):对“std::\uuuucx11::basic\u string::\u M\u create(unsigned long&,unsigned long)”的未定义引用
我发现它可能与编译器版本有关。然而,据我所知,我自己编译所有依赖项,使用gcc/g++-6、7和9(>https://github.com/preshing/junction/issues/37>,及)

我还发现它可能与用于编译的命令有关。使用
gcc
必须显式链接c标准库,使用
g++
它会自动链接。但在make文件中未找到信息

你知道如何修复这个错误吗?我在下面发布了整个输出

[59%]链接CXX可执行文件.././mconvert
/usr/bin/ld:CMakeFiles/mconvert.dir/mconvert.cpp.o:在函数“std::_cxx11::basic_string::basic_string(char const*,std::allocator const&)[clone.isra.19]”中:
mconvert.cpp:(.text+0x86):对“std::\uuuucx11::basic\u string::\u M\u create(unsigned long&,unsigned long)”的未定义引用
/usr/bin/ld:mconvert.cpp:(.text+0xbc):未定义对“std::\uuuu throw\u logic\u error(char const*)”的引用
/usr/bin/ld:CMakeFiles/mconvert.dir/mconvert.cpp.o:在函数“usage”和“exit()”中:
mconvert.cpp:(.text+0xca):对“std::cerr”的未定义引用
/usr/bin/ld:mconvert.cpp:(.text+0xd8):对“std::basic_ostream&std::_ostream_insert(std::basic_ostream&,char const*,long)”的未定义引用
/usr/bin/ld:mconvert.cpp:(.text+0xe6):未定义对“std::cerr”的引用
/usr/bin/ld:mconvert.cpp:(.text+0xf0):对“std::basic_ostream&std::_ostream_insert(std::basic_ostream&,char const*,long)”的未定义引用
/usr/bin/ld:mconvert.cpp:(.text+0xf7):未定义对“std::cerr”的引用

/usr/bin/ld:mconvert.cpp:(.text+0x103):未定义对'std::basic_ostream&std::operator'的引用尝试使用g++编译器进行如下编译

g++-o

要安装它,您可以使用

$sudo apt get install g++


希望它能工作

正如这里提到的答案,它与编译器版本无关,而是与使用不同的_GLIBCXX_USE_cx11_ABI值构建对象有关。您是否仍在使用GCC5的运行库?CMake需要检查该ELF的列表,配置中可能有错误。@Swift FridayPie,谢谢您的提示。因为我更多的是一个休闲制造者,我不知道该去哪里找。我应该检查什么精灵,我在寻找什么?我检查了pmp库的CMake列表,没有发现任何关于GLIBCXX、CXX11和ABI的提及……我不知道如何为您的构建环境做到这一点,但如果它尝试使用libstdc++(默认为gcc),这并不能回答问题