【问题标题】:Very simple program not working in c++?非常简单的程序不能在 C++ 中运行?
【发布时间】:2012-03-15 21:18:11
【问题描述】:

我不明白为什么这不起作用...

我在 Linux 中工作

g++ 什么都不做

gcc 打印以下内容:

/tmp/ccyg7NDd.o: In function `main':
test.cc:(.text+0x14): undefined reference to `std::cout'
test.cc:(.text+0x19): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
test.cc:(.text+0x21): 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> >&)'
test.cc:(.text+0x29): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/ccyg7NDd.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cc:(.text+0x51): undefined reference to `std::ios_base::Init::Init()'
test.cc:(.text+0x56): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccyg7NDd.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

代码:

#include<iostream>
#include<stdio.h>

int main(){

std::cout<<"test "<<std::endl;
return 0;

};

【问题讨论】:

  • g++什么都不做是什么意思?
  • gcc是C编译器,需要使用g++。你是什​​么意思g++ 什么都不做?您必须在构建后执行已编译的二进制文件(即当 g++ 完成时)。
  • @hmjd: g++ gcc,它只是自动链接到 libstdc++。您可以通过提供 -lstdc++ 来获得与 gcc 相同的效果。
  • @spatara:编译器只会在出现问题时打印一些东西。像大多数 Unix 风格的程序一样,沉默意味着成功。如果你给编译器一个-o 选项,你应该找到一个名为a.out 的程序,或者其他的东西;运行应该将test 打印到控制台。
  • @spatara 如果你不喜欢安静,你可以传递--verbose 标志,它会告诉你比你想知道的更多。

标签: c++ cout


【解决方案1】:

我认为这个问题的根本问题是二进制名称“test”实际上已经是 linux 系统的一部分。键入“man test”会显示测试二进制文件的手册。我有完全相同的问题。只需将二进制文件编译为“test”以外的内容即可解决。

【讨论】:

    【解决方案2】:

    编译器用空格分隔。在所有关键字和

    【讨论】:

    • Letters 和 '
    • 这绝对是错误的。 C++ 编译器仅在极少数情况下需要空格,因为它们无法对输入进行标记或错误地标记输入(例如旧的模板化模板 > 问题 - 新的编译器现在无论如何都可以解决)。
    【解决方案3】:

    gcc 是 C 编译器,您需要使用 g++ (或使用 gcc 和选项 -lstdc++ 其他人指出)。如果在您使用 g++ 后没有打印任何内容,那么您必须在构建后执行已编译的二进制文件(即当 g++ 完成时)。

    main.cpp:

    #include<iostream>
    
    int main(){
    
    std::cout<<"test "<<std::endl;
    return 0;
    
    };
    

    构建:

    g++ main.cpp -o main
    

    执行:

    ./main
    

    输出:

    test 
    

    【讨论】:

      【解决方案4】:

      我认为您错误地使用 C 编译器命令而不是 C++ 编译器命令进行链接。试试这个:

      g++ test.cc -o 测试

      【讨论】:

        【解决方案5】:

        这是一个 C++ 代码,所以你应该使用 g++ 而不是 gcc。也不需要#include<stdio.h>

        【讨论】:

          【解决方案6】:
          gcc main.cpp -lstdc++
          

          g++ main.cpp
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-10
            • 1970-01-01
            相关资源
            最近更新 更多