【问题标题】:How can I find which library I am missing when I compile my Objective-C++ code?当我编译我的 Objective-C++ 代码时,如何找到我缺少的库?
【发布时间】:2019-01-07 17:39:53
【问题描述】:

有时,我遇到这样的错误:

Unknown error compiling opencv framework: Undefined symbols: "_CGImageDestinationCreateWithURL"

我得到了完全相同的错误,在我与 ImageIO.framework 链接后,一切都解决了。但是我怎么知道缺少的框架是 ImageIO 呢?有什么技巧可以查出来吗?或者 Xcode 可以帮我找出答案吗?

【问题讨论】:

  • 这不是“未知错误”,而是“未定义符号错误”。搜索丢失的符号可能是一个好的开始。
  • 未定义符号只是编译器告诉您它需要符号的定义。 ImageIO.framework 提供了这个定义。

标签: c++ xcode objective-c++


【解决方案1】:

如果您仔细查看错误消息,您会发现 xcode 告诉您缺少什么。

Undefined symbols: "_CGImageDestinationCreateWithURL", referenced from: 
cv::ImageIOEncoder::write(cv::Mat const&, std::vector > const&)
in OpenCV(grfmt_imageio.o)

好的,首先搜索列出的未定义符号,例如:-CGImageDestinationCreateWithURL。然后查看类的头文件中未定义的符号来自哪里。对于 CGImageDestinationCreateWithURL,它是 CGImageDestination.h。查看头文件的顶部并检查您是否拥有它们导入的所有框架。在您的情况下,它是 #include <CoreGraphics/CoreGraphics.h>#include <ImageIO/CGImageSource> 和另一个 ImageIO 导入。这应该告诉您必须导入 CoreGraphics 框架和 ImageIO 框架。

【讨论】:

  • 我怎么知道ImageIOEncoder来自ImageIO.framework
  • 我喜欢为此使用mdfind 命令。虽然现在 Xcode 中可能内置了一些东西,但我从来没有费心去发现 :)
  • @DNB5brims 符号前缀通常是框架的名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多