【问题标题】:CMake No rule to make targetCMake没有制定目标的规则
【发布时间】:2021-06-06 19:18:42
【问题描述】:

我正在尝试使用 clang 12 和 OpenCV4 在 macOS 11.4 上构建 ORB_SLAM2 并遇到此错误:

make[2]: *** No rule to make target `/usr/lib/libz.dylib', needed by `../lib/libORB_SLAM2.dylib'. Stop.

此文件在我的 Mac 上不存在,由于 macOS 的 SIP,我无法添加此符号链接。正确的路径应该是/usr/local/opt/zlib/lib/libz.dylib

如何修复这个/usr/lib/libz.dylib 引用?

Here is my branch 我的 macOS 构建更改。

我已尝试通过以下方式解决问题:

  • 使用 otool -L 检查项目的每个直接依赖项,并在必要时从源代码(例如 OpenCV)重新构建,以确保未引用 /usr/lib/libz.dylib(修复建议 here
  • 在 ORB_SLAM2 CMakeLists.txt 中使用 CMake 的 FindZLIB.cmake 模块来确保找到正确的 ZLIB

以下是显示 ZLIB 已找到但仍然没有成功的输出:

-- Found ZLIB: /usr/local/opt/zlib/lib/libz.dylib (found version "1.2.11")

【问题讨论】:

  • 你需要找出错误路径/usr/lib/libz.dylib来源。它可能没有被清除缓存(CMakeCache.txt),它可能是一些提供错误路径的实用程序,它可能是硬编码。除非你找到根源,否则你不可能解决问题。
  • 绝对不是缓存,我已经清空了整个build 目录。关于如何快速找到这条路径的来源,您有什么建议吗?我对/usr/local/opt dylibs 进行了扫描,仍然有很多引用指向错误的libz 路径。希望有一种比从源代码重建所有这些库更快的方法来解决这个问题。
  • 我将从详细构建 (make VERBOSE=1) 开始,并检查链接器的确切命令行是否包含错误的路径。
  • 搜索包含libz.dylib的文本文件的源和/或构建目录可能会缩小搜索范围...它应该出现在make用作依赖项的某些文件中...
  • 也许只是删除该引用并使用 -lz 链接已安装在 macOS 中的 zlib dylib。

标签: macos cmake zlib


【解决方案1】:

已解决:我检查了 CMakeFiles/Makefile.cmake,它表明我使用的 Pangolin 库实际上是我的另一个项目中的一个。在这个项目中构建 Pangolin 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-27
    • 2011-06-02
    • 1970-01-01
    • 2015-09-26
    • 2021-05-28
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多