clang ++链接器未定义的符号,用于体系结构x86_64

时间:2017-03-24 04:32:40

标签: c++ compiler-errors

$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)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试:

clang++ main.cpp -o out -lpng

原因在于:您没有提供包含PNG库实现的库(最有可能是libpng)。您需要将-lpng添加到编译器中,以便它与相关库链接。在您的特定情况下,它可能不完全是-lpng,但它肯定是&#34;缺少的库&#34;。在不确切知道您要使用的库的情况下(您没有提供某些来源&#34;尝试使用&#34进行修复;)。

正如评论中指出的那样:你正在使用某种C ++包装器,上面可能还不够 - 但是如果不确切知道你实际使用的png功能上的哪个C ++包装器,那就很难了说出命令行应该是什么样的。

也许this

相关问题