【问题标题】:CMake - Installing issues to make packageCMake - 安装问题以制作包
【发布时间】:2017-07-18 22:19:07
【问题描述】:

为了安装 dlib,我遵循了这个教程:http://www.pyimagesearch.com/2017/03/27/how-to-install-dlib/。 我在 Mac OS X 10.12.5 上并使用 Python 3.5。 我跑

$ brew install cmake
$ brew install boost
$ brew install boost-python --with-python3

它可以正常工作。
但是当我尝试使用 pip install dlib 安装 dlib 时。我有一个错误:

The C compiler
    "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc"
    is not able to compile a simple test program.
error: cmake configuration failed

ld: can't map file, errno=22 file '/usr/local/opt/qt/lib' for architecture x86_64

有关完整错误,请参阅此链接(不想粘贴完整错误): https://gist.github.com/alexattia/3e98685310d90b65031db640d3ea716a

回溯错误后,当我尝试手动制作 dlib 时,我有这个:

  Linking C executable cmTC_05e45

  /usr/local/Cellar/cmake/3.8.2/bin/cmake -E cmake_link_script
  CMakeFiles/cmTC_05e45.dir/link.txt --verbose=1


  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
  -Wl,-search_paths_first -Wl,-headerpad_max_install_names
  /usr/local/opt/qt/lib CMakeFiles/cmTC_05e45.dir/testCCompiler.c.o -o
  cmTC_05e45

完整的跟踪扩展:https://gist.github.com/alexattia/1e54ffb87c9eb4c811033f5cadd90331

我重新安装了 XCode(来自 Apple Store)和 CMake(来自下载页面的 3.8.2),我什至安装了 Qt Creator 以获得一个干净的 Qt 版本,但我仍然有同样的错误。
我尝试使用 conda 安装它,但安装后,我仍然没有 python 中的模块。

非常感谢您的帮助。

【问题讨论】:

  • 您的具体问题是 - 什么?
  • 我该如何解决这个问题并安装 dlib ?
  • 日志中的关键错误行是ld: can't map file, errno=22 file '/usr/local/opt/qt/lib' for architecture x86_64(也就是说,该行应该在问题帖子中本身)。有人将目录/usr/local/opt/qt/lib 传递给链接器,链接器将其视为链接文件。可能,你有指定的环境变量。
  • 我编辑了我的帖子以添加该行。事实上,在我的.bash_profile 中,我有export LDFLAGS="/usr/local/opt/qt/lib"export CPPFLAGS="/usr/local/opt/qt/include"export PATH="/usr/local/opt/qt/bin:$PATH"。但即使在评论它时,我仍然有同样的错误。

标签: python c++ macos qt cmake


【解决方案1】:

你评论了:

确实,在我的 .bash_profile 中,我有 export LDFLAGS="/usr/local/opt/qt/lib", 导出 CPPFLAGS="/usr/local/opt/qt/include",导出 PATH="/usr/local/opt/qt/bin:$PATH"。 但即使在评论它时,我仍然有同样的错误

您对LDFLAGSCPPFLAGS 的分配都没有意义,而且 第一个是与您有关的链接器故障的原因。

环境变量LDFLAGS 的值(如果设置)由您的构建系统解释 作为链接选项。同样环境变量的值 CPPFLAGS,如果设置,则被解释为预处理器选项。

/usr/local/opt/qt/lib 不是链接选项,/usr/local/opt/qt/include 不是预处理器选项。这些只是目录名称。任何论证 您传递给不是选项的链接器(或预处理器或编译器)是 由工具作为输入文件插入。因此,您使链接器相信 /usr/local/opt/qt/lib 是链接的输入文件。

ld: can't map file, errno=22 file '/usr/local/opt/qt/lib' for architecture x86_64

是链接器在发现 /usr/local/opt/qt/lib 不是时所说的 一个文件。

大概,您希望指示链接器 /usr/local/opt/qt/lib 是 它应该在其中搜索链接所需的库的目录。 表达该意图的链接选项是:

-L/usr/local/opt/qt/lib

这里是GCC options for linking

同样,您打算指示该预处理器 /usr/local/opt/qt/include 是一个目录,它应该在其中搜索头文件。预处理器 表达的选项是:

-I/usr/local/opt/qt/include

这里是GCC options for preprocessing

指定编译或链接选项是异常且不可取的 正如您所做的那样,在您的 bash 登录配置文件中。在 构建系统的输入文件(makefile、cmakelists 文件或类似文件),或作为参数 构建系统的配置。但是如果你坚持在 你的 bash 登录配置文件,那么你应该指定:

LDFLAGS=-L/usr/local/opt/qt/lib
CPPFLAGS=-I/usr/local/opt/qt/include

一旦您在bash_profile 中进行了这些环境设置,它们将 仅在新的登录 shell 中生效。

【讨论】:

  • 非常感谢您的解释。有效!您说:“在您的 bash 登录配置文件中指定编译或链接选项是不正常且不可取的,就像您正在做的那样。”什么是可取的?如何找到要在配置文件中使用的输入文件?
【解决方案2】:

我遇到了类似的问题,但发现是由于 boost。

试试这个。

  brew uninstall boost-python
  brew uninstall boost
  brew install boost-python --with-python3 --without-python
  pip3 install dlib

【讨论】:

  • 谢谢,但它不起作用。我仍然有同样的错误。 ld: can't map file, errno=22 file '/usr/local/opt/qt/lib' for architecture x86_64
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 2018-10-30
  • 2022-06-11
  • 2015-07-09
相关资源
最近更新 更多