我是靠谱客的博主 俭朴唇彩,最近开发中收集的这篇文章主要介绍linux Clion cmake出现错误 undefined reference to `std::cout‘,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Clon执行时 出现如下错误:

/usr/bin/cmake --build /home/lenong0427/CLionProjects/untitled2/cmake-build-debug --target untitled2
[1/1] Linking CXX executable untitled2
FAILED: untitled2 
: && /usr/bin/gcc -g  CMakeFiles/untitled2.dir/main.cpp.o -o untitled2   && :
/usr/bin/ld: CMakeFiles/untitled2.dir/main.cpp.o: warning: relocation against `_ZSt4cout' in read-only section `.text'
/usr/bin/ld: CMakeFiles/untitled2.dir/main.cpp.o: in function `main':
/home/lenong0427/CLionProjects/untitled2/main.cpp:54: undefined reference to `std::cout'
/usr/bin/ld: /home/lenong0427/CLionProjects/untitled2/main.cpp:54: undefined reference to `std::ostream::operator<<(int)'
/usr/bin/ld: /home/lenong0427/CLionProjects/untitled2/main.cpp:54: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/usr/bin/ld: /home/lenong0427/CLionProjects/untitled2/main.cpp:54: undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/usr/bin/ld: CMakeFiles/untitled2.dir/main.cpp.o: in function `__static_initialization_and_destruction_0(int, int)':
/usr/include/c++/11.2.0/iostream:74: undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: /usr/include/c++/11.2.0/iostream:74: undefined reference to `std::ios_base::Init::~Init()'
/usr/bin/ld: CMakeFiles/untitled2.dir/main.cpp.o: in function `std::vector<int, std::allocator<int> >::_S_check_init_len(unsigned long, std::allocator<int> const&)':
/usr/include/c++/11.2.0/bits/stl_vector.h:1770: undefined reference to `std::__throw_length_error(char const*)'
/usr/bin/ld: CMakeFiles/untitled2.dir/main.cpp.o: in function `__gnu_cxx::new_allocator<int>::deallocate(int*, unsigned long)':
/usr/include/c++/11.2.0/ext/new_allocator.h:145: undefined reference to `operator delete(void*)'
/usr/bin/ld: CMakeFiles/untitled2.dir/main.cpp.o: in function `__gnu_cxx::new_allocator<int>::allocate(unsigned long, void const*)':
/usr/include/c++/11.2.0/ext/new_allocator.h:116: undefined reference to `std::__throw_bad_array_new_length()'
/usr/bin/ld: /usr/include/c++/11.2.0/ext/new_allocator.h:117: undefined reference to `std::__throw_bad_alloc()'
/usr/bin/ld: /usr/include/c++/11.2.0/ext/new_allocator.h:127: undefined reference to `operator new(unsigned long)'
/usr/bin/ld: CMakeFiles/untitled2.dir/main.cpp.o:(.data.rel.local.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: 错误:ld 返回 1
ninja: build stopped: subcommand failed.

解决方法: 在 CMakeLists.txt 中添加如下命令,将gcc改为 g++ 为编译器。

set(CMAKE_CXX_STANDARD 11) 改为 SET(CMAKE_CXX_COMPILER /usr/bin/g++)
# set(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_COMPILER /usr/bin/g++)


 

用 gcc 直接编译会出现同样的错误,用 g++直接编译则不会。

1. 使用 “;” 符号运行多条指令 cmd1 ; cmd2 ; cmd3

首先执行cmd1,然后执行cmd2,最后执行cmd3。
这种是AOE技能,无论你输入多少条指令都还会按顺序一一执行,就算有指令执行失败也会继续执行后面的指令,出手就没有回头,除非你把系统干掉

2.使用 “&&” 符号运行多条指令 cmd1 && cmd2 && cmd3

首先执行cmd1,cmd1执行成功之后才执行cmd2,cmd2执行成功之后再执行cmd3。前一条指令执行失败,则后面的指令都不会执行。
这种关系比较密切,当有个别指令翻车的时候,后面的指令可以立马知道,及时下车,防止连环车祸。

3. 使用 “||” 符号运行多条指令  cmd1 || cmd2 || cmd3

首先执行cmd1,当cmd1执行失败时执行cmd2,当cmd2失败时执行cmd3。前一条指令执行成功,则后面的指令都不会执行。

如果还是不行,则推荐直接使用命令行执行命令:

 rm -f main ; g++ main.cpp -o main ; ./main

gcc 一如既往的报错:

  rm -f main ; gcc main.cpp -o main -lstdc++ ; ./main

编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。    

编译可以用gcc/g++,而链接可以用g++或者gcc  -lstdc++

-lstdc++ 则不会出错. 用GCC编译c++文件时,必须加上-lstdc++的参数选项,告诉编译器自动调用g++编译器来自动链接C++里面的库函数,否侧,生成的可执行文件不能运行成功。

指定c++版本 可以用 -std=xxx 指定

-std=c++98
-std=c++99
-std=c++11
-std=c++14
-std=c++17

最后

以上就是俭朴唇彩为你收集整理的linux Clion cmake出现错误 undefined reference to `std::cout‘的全部内容,希望文章能够帮你解决linux Clion cmake出现错误 undefined reference to `std::cout‘所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部