概述
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‘所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复