【问题标题】:Clang compiler error for very simple program非常简单的程序的 Clang 编译器错误
【发布时间】:2014-01-05 17:14:35
【问题描述】:

我正在尝试开始使用 c++。我在安装了 Mavericks OS 的 Mac 上。

我要编译的程序是:

#include <iostream>

int main()
{
    std::cout << "Enter two numbers:" << std::endl;

    return 0;
}

这里是cc的版本:

Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

但是,当我尝试编译时:

cc test.cc

我收到以下错误:

...
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<<<std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in test-AeQQK5.o
  ___clang_call_terminate in test-AeQQK5.o
"___cxa_end_catch", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<<<std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in test-AeQQK5.o
"___gxx_personality_v0", referenced from:
  std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<<<std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in test-AeQQK5.o
  std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-AeQQK5.o
  Dwarf Exception Unwind Info (__eh_frame) in test-AeQQK5.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我做错了什么?

【问题讨论】:

  • @TheBuzzSaw 向下箭头上的工具提示说明了一切:“这个问题表明没有研究工作,不清楚或没有用。”此外,“问题必须表明对正在解决的问题有最低限度的了解”。
  • 我认为这有点苛刻。他清楚地找到了编译器,但不知道有两种模式。

标签: c++ macos clang


【解决方案1】:

您正在将其编译为 C 程序。将其编译为 C++ 程序:

c++ test.cc

最好也加入一些警告标志:

c++ -Wall -Wextra -pedantic-errors test.cc

【讨论】:

  • @RandomParentheses 把那本书扔到很远的地方(但只有在你用汽油把它烧掉之后)。这些是那种蹩脚的书,后来会断言“数组是指针”、“引用是指针”以及所有其他流行的(和可怕的)恶作剧。
  • @H2CO3 这实际上是“C++ Primer”,这是这里提到的顶级初学者书籍:stackoverflow.com/questions/388242/…
  • @RandomParentheses 那真是个遗憾。你最好读一读 Bjarne Stroustrup 的书。
【解决方案2】:

您需要运行clang++,而不仅仅是clang。

【讨论】:

    【解决方案3】:

    虽然用 gcc 编译 C++ 源代码 *.cc 非常好(它将具有该扩展名的文件视为 C++ 源代码),但链接器也需要明确的信息来链接正确的 c++ 库。

    (注意:我认为 clang 和 gcc 在这个问题上是相似的)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多