【问题标题】:Xcode "ld: library not found" for C++ makefile projectC++ makefile 项目的 Xcode“ld: library not found”
【发布时间】:2020-10-30 22:14:59
【问题描述】:

操作系统:Mac 10.14.6 -- Xcode 版本:11.3.1

我有一个导入 Xcode 的外部 C++ 项目(使用现有的 makefile 构建),当我尝试构建它时,我收到以下错误消息:ld: library not found for -ljpeg

奇怪的是,当我从命令行运行相同的构建命令 ($make all-recursive) 时,它会成功构建。我已经仔细检查过,相关的 .dylib 文件确实存在于 /usr/local/lib 中。从网上阅读看来,Xcode build-settings 似乎需要库搜索路径来包含 .dylib 文件所在的目录,所以我在目标“Build Settings”下添加了 LIBRARY_SEARCH_PATHS,但这并没有解决问题。

有什么原因让我想到为什么 Xcode 的构建命令会失败而我的不会?

【问题讨论】:

  • 将 .dylib 拖到你的 xcode 项目中
  • 完成后,如何告诉 Xcode 11 链接这些库?我会/认为/这将是“将二进制文件与库链接”阶段,但它是灰色的。
  • 在将文件拖入 xcode 时,是否将文件复制到目标文件夹? XCode 会弹出一个提示,要求您这样做。
  • 当将 dylib 拖入根项目文件夹时,我得到一个弹出窗口,提供三个选项:目标:如果需要,复制项目(未选中)、添加文件夹(创建组)和添加到目标(我的项目被选中)。我也事先通过 Finder 将 dylib 物理复制粘贴到了根项目文件夹中。我是使用 Xcode 的新手,所以如果这个 dylib 包含方法记录在某处,我将非常感谢链接!不幸的是,构建仍然失败并出现同样的错误。
  • 尝试从根项目文件夹中手动删除它们,然后将它们拖入并选中“如果需要则复制项目”和“添加到目标”框,然后编译。

标签: c++ xcode


【解决方案1】:

链接还应收到-L<path> 形式的标志,该标志在-ljpeg 标志之前具有指向jpeg 库父文件夹的路径。

所以将-L/usr/local/lib 添加到其他链接器标志构建设置并重试。

找到正确标志的简单方法是运行pkg-config

pkg-config --libs libjpeg
-L/usr/local/Cellar/jpeg/9d/lib -ljpeg

如果失败,您可以:

  • 从原始位置复制 dylib。
  • 将其粘贴到文件夹@executable_path/../Resources/lib。如果需要,创建这些文件夹。

然后重建。

最可靠的方法是在 -l 选项中传递完整路径,而不是将其分成两个组件。

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 2016-05-21
    • 2015-03-07
    • 2019-10-31
    • 2020-12-10
    • 2016-07-02
    • 2016-04-14
    • 2015-06-15
    • 1970-01-01
    相关资源
    最近更新 更多