gcc 链接器 MacOs 找不到 Std::cout

Std::cout couldn't be found by the gcc linker MacOs

提问人:Jan 提问时间:6/24/2022 最后编辑:Jan 更新时间:6/24/2022 访问量:188

问:

所以我收到 gcc 的这个链接错误

Undefined symbols for architecture x86_64:
  "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
      std::__1::ctype<char> const& std::__1::use_facet<std::__1::ctype<char> >(std::__1::locale const&) in main-a06879.o
  "std::__1::ios_base::getloc() const", referenced from:
      std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const in main-a06879.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(unsigned long, char)", referenced from:
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(unsigned long, char) in main-a06879.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
      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 main-a06879.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main-a06879.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main-a06879.o
  "std::__1::cout", referenced from:
      _main in main-a06879.o
  "std::__1::ctype<char>::id", referenced from:
      std::__1::ctype<char> const& std::__1::use_facet<std::__1::ctype<char> >(std::__1::locale const&) in main-a06879.o
  "std::__1::locale::~locale()", referenced from:
      std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const in main-a06879.o
  "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main-a06879.o
  "std::__1::ios_base::clear(unsigned int)", referenced from:
      std::__1::ios_base::setstate(unsigned int) in main-a06879.o
  "std::terminate()", referenced from:
      ___clang_call_terminate in main-a06879.o
  "___cxa_begin_catch", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main-a06879.o
      ___clang_call_terminate in main-a06879.o
  "___cxa_call_unexpected", referenced from:
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >::failed() const in main-a06879.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >::ostreambuf_iterator(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in main-a06879.o
  "___cxa_end_catch", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main-a06879.o
  "___gxx_personality_v0", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main-a06879.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 main-a06879.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >::failed() const in main-a06879.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >::ostreambuf_iterator(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in main-a06879.o
      std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const in main-a06879.o
      Dwarf Exception Unwind Info (__eh_frame) in main-a06879.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

它似乎找不到负责所有 std 命名空间函数的库。 在我的hello world程序中,链接器找不到std::cout。 还有我的代码编辑器:Visual Studio Code 抱怨同样的错误。

#include <iostream>

int main(){

    std::cout << "Hello world!\n";
    return 0;

}

到目前为止,我尝试过:

  1. 重新安装 Xcode 命令行工具
  2. 按照这个之前提出的问题的答案,与我有同样的问题,我也不使用通过自制软件安装的 clang,而是使用 Xcode 命令行工具附带的版本

我不知道这是怎么发生的。 也许我曾经在我的 shell 中盲目地使用过一些来自互联网的命令之类的 但是,也许有没有办法重置所有这些库搜索路径或任何创建此行为的方法。

C++ Xcode macOS 链接器错误

评论

0赞 Christian Gibbons 6/24/2022
不会解决你的问题,但认为你应该知道苹果将 gcc 别名为 clang,所以它实际上是你在这里使用的 clang 编译器而不是 gcc。
1赞 Mat 6/24/2022
g++是 C++ 编译驱动程序。 用于 C。gcc

答:

0赞 Jan 6/24/2022 #1

好的,所以我只是遵循了 Stack Overflow 上另一个讨论的建议,我只是使用“g++”而不是“gcc”,就像我之前编译我的程序一样