【问题标题】:clang++ linker undefined symbols for architecture x86_64用于架构 x86_64 的 clang++ 链接器未定义符号
【发布时间】:2017-03-24 04:32:39
【问题描述】:
$clang++ main.cpp -o out

出现以下错误,更改为 g++ 时发生相同的错误。我已经在一些简单的 C++ 代码上进行了测试,该命令运行良好。所以这是那个PNG类文件中的问题吗?但是,之前在我的 MacOS 上运行相同的文件,但今天突然失败了。

Undefined symbols for architecture x86_64:
"PNG::writeToFile(std::__1::basic_string<char, std::__1::char_traits<char>,   std::__1::allocator<char> > const&)", referenced from:
  _main in main-f6a06a.o
"PNG::PNG(std::__1::basic_string<char, std::__1::char_traits<char>,  std::__1::allocator<char> > const&)", referenced from:
  _main in main-f6a06a.o
"PNG::PNG(unsigned long, unsigned long)", referenced from:
  _main in main-f6a06a.o
"PNG::~PNG()", referenced from:
  _main in main-f6a06a.o
"PNG::operator()(unsigned long, unsigned long)", referenced from:
  _main in main-f6a06a.o
"PNG::width() const", referenced from:
  _main in main-f6a06a.o
 "PNG::height() const", referenced from:
  _main in main-f6a06a.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

  • 我没有看到正在链接的任何其他对象或库或在该命令行上正在编译的任何其他文件。 PNG在哪里实现?

标签: c++ compiler-errors


【解决方案1】:

您是否错过了向链接器提供静态/共享以解决上述方法的链接器错误?另请注意,与 g++ 相比,clang++ 是不同的编译器,因此需要由您使用的同一编译器 (clang++) 之前编译的静态/共享库。

【讨论】:

  • 在mac上,g++已经clang了很长时间——至少5年。但是是的,需要将库添加到命令行。
【解决方案2】:

试试:

clang++ main.cpp -o out -lpng

原因如下:您没有提供包含 PNG 库实现的库(很可能是 libpng)。您需要将-lpng 添加到您的编译器中,以便它与相关库链接。在您的特定情况下,它可能不完全是-lpng,但它绝对是一个“缺失的库”。在不知道您尝试使用的确切库的情况下(您没有提供一些“尝试修复”的源)。

正如评论中所指出的:您在顶部使用了某种 C++ 包装器,以上内容可能还不够 - 但在不确切知道您实际使用的 png 功能上的哪个 C++ 包装器的情况下,很难说是什么命令行应该是这样的。

也许this

【讨论】:

  • IIRC libpng 是一个 C 库,这里似乎缺少一些 C++ 包装器。
  • 是的,可能。我将添加更多文字来解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
相关资源
最近更新 更多