【问题标题】:osx - C++14 compiler not detected, multiple versions of gcc when compiling graph-tool in anacondaosx - 在 anaconda 中编译图形工具时未检测到 C++14 编译器,多个版本的 gcc
【发布时间】:2017-10-24 14:19:18
【问题描述】:

我的最终目标是让 python 包 graph_tool 在我的系统上运行,如果可能的话也在 ipynb 上运行。我已经有brew install graph-toolas indicated here,但还是不够。

所以我关注conda instructions here,并取得了不错的进展,直到遇到配置的编译器问题。

$ conda create -n py36env python=3.6.3 anaconda
(py36env) $ conda install -c conda-forge cgal 
... and so forth with the other required libraries

(py36env) Tams-MacBook-Pro:graph-tool-2.25 tamtam$ ./configure --prefix=/Users/tamtam/anaconda3/envs/py36env/ --with-python-module-path=/Users/tamtam/anaconda3/envs/py36env/lib/python3.6/site-packages
.
.
.
checking whether g++ supports C++14 features by default... no
checking whether g++ supports C++14 features with -std=gnu++14... no
checking whether g++ supports C++14 features with -std=gnu++1y... no
configure: error: *** A compiler with support for C++14 language features is required.

我对编译器的东西不是很熟悉,但我检查我的系统如下:

(py36env) Tams-MacBook-Pro:graph-tool-2.25 tamtam$ conda list | grep gcc
gcc                       4.8.5                         8

在 conda 环境之外:

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/Users/tamtam/anaconda3/envs/py36env/bin/../libexec/gcc/x86_64-apple-darwin11.4.2/4.8.5/lto-wrapper
Target: x86_64-apple-darwin11.4.2
Configured with: ./configure --prefix=/Users/ray/mc-x64-3.5/conda-bld/gcc-4.8_1477649012852/
Thread model: posix
gcc version 4.8.5 (GCC)

还有 Homebrew

$ brew list --versions | grep gcc
gcc 7.1.0 7.2.0
$ /usr/local/bin/gcc-7 --version
gcc-7 (Homebrew GCC 7.2.0) 7.2.0
$ echo $PATH
/Users/tamtam/anaconda3/bin:/Users/tamtam/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin


所以我的问题是:包含编辑
1) 我系统上的conda gcc 4.8.5Homebrew gcc 7.2 有什么区别?我很困惑,因为它们都是最新的软件包。
编辑:我在网上阅读的任何地方都没有明确说明这一点,但我理解(又名有根据的猜测,因为现在是凌晨 3 点,我需要睡觉)conda gcc 4.8.5 相当于brew gcc 4.8.5,而 Anaconda 在开发“官方的 gcc 支持 C++14。与此同时,我 conda install -c salford_systems gcc-5./configure 似乎发现自己是一个 C++14 编译器。是的(但这也让我遇到了一个新问题 T.B.A.)
注意:我还尝试使用conda gcc 4.8.5brew gcc 7.2.0 运行./configure 文件(切换默认gcc 编译器guided here),但./configure 的错误仍然相同,没有找到C++14 编译(所以忽略这)

2)我也有Xcode 8.3.3,它也带有clang,这是gcc符号链接到的......??不知道设置/关系

3) 如何调整我的系统(例如路径),以便配置过程能够检测到 C++14 编译器?编辑:按 1)

解决

【问题讨论】:

  • 询问之前是否做过任何研究?输出非常自描述,查找它的编译器要求以及如何指定要使用的编译器。如果您不知道 Brew 和 Anaconda 是如何操作和关联的(提示:它们完全相互独立,没有兼容性保证),这表明您甚至不需要查找它们的基本信息。表现出一些努力。
  • 也就是说,您没有遵循“此处的 conda 指令”,它指示从源代码针对 Anaconda 的 Python 编译 graph-tool。您必须决定是否更愿意将 graph-tool 与 Homebrew's 或 Anaconda 的生态系统一起使用 - 哪个更适合您的需求。
  • 嗨,Ivan,您回答之前阅读了我的问题吗?我特别问了conda gcc 4.8.5 vs brew gcc 7.2,而不是conda vs brew。当然,很容易从 Anaconda 或 Homebrew 中选择一个功能正常的graph-tool,但就像我详细提出的问题一样,Homebrew 版本目前无法正常工作,我在安装 Anaconda 版本时遇到了问题。这就是为什么我在 SO 上寻求帮助,而不是你毫无根据的批评。
  • 是的,Ivan,我之前确实做过研究。特别是您没有看到的研究工作,因此无法判断。即使进一步的研究可以让我得到答案,询问那些更有经验的人的知识也没有错。 (我有没有提到我是初学者?)请帮助将 SO 作为一个支持平台。
  • 我只能看到你在问题中写的内容,我(仍然)无法读心。我不知道为什么 Homebrew 的 graph-tool 对你来说“不够”。 brew 应该已经安装了所有依赖项,所以它应该可以正常工作,并且是一种简单的方法,因为您可能不需要手动编译任何东西。我确实错过了您在 anaconda 的环境中编译图形工具 - 为此,我深表歉意。

标签: macos gcc c++14 homebrew conda


【解决方案1】:

(此解决方案也包含在我的问题底部的编辑中。)

我阅读过的网上任何地方都没有明确说明这一点,但我理解(又名有根据的猜测,因为现在是凌晨 3 点,我需要睡觉)conda gcc 4.8.5 相当于brew gcc 4.8.5,而 Anaconda 在开发支持 C++14 的“官方”gcc。与此同时,我 conda install -c salford_systems gcc-5./configure 似乎发现自己是一个 C++14 编译器。是的(但这也让我去了a new problem

注意:我还尝试使用conda gcc 4.8.5brew gcc 7.2.0 运行./configure 文件(切换默认gcc 编译器guided here),但./configure 的错误仍然相同,找不到C++14 编译出现(所以忽略这个)

【讨论】:

    【解决方案2】:

    根据经验,如果产品提供了自己的构建工具(编译器、C 头文件、静态库、包含/库路径等)而不是使用系统的工具,那么在构建要在其内部使用的东西时,您应该使用这些工具。环境。

    这是因为,根据包含文件、编译器、编译器版本、编译器标志、预定义宏等,使用不同工具链构建的相同源和库可能是二进制不兼容的。 This goes double for C++ 根本没有 ABI 标准。 (在 C 语言中,由于需要执行 system calls,大多数平台都存在事实上的编译器。)

    现在,您的系统上有什么:

    • 系统的库存gcc(如果有)位于/usr/bin(因此包括/usr/include,静态库/usr/lib 等)
    • Homebrew 的 gcc 7.2 /usr/local/bin(包括可能在 /usr/local/include
    • Anaconda 也有一个 gcc 软件包,如果安装它,它会驻留在类似 /Users/<login>/anaconda3/envs/<env name>/bin 的地方

    如果一个环境提供了一个自己的工具链,它提供了一些方法来让构建脚本在构建东西时选择那个工具链。一种常见的方法是设置相关的环境变量(PATHINCLUDELIB)——直接或通过环境提供的一些工具。 Homebrew 可执行文件驻留在/usr/local/bin 中,即always present in UNIX PATH as per the FHS; Anaconda 会在其环境被激活时将自己添加到 PATH


    所以,正如您自己猜到的那样,由于 Anaconda 提供了自己的 gcc 包(因此通过包元数据强制其输出与其二进制包的兼容性 - 如果已知不兼容,安装将由于需求冲突而失败) ,你需要安装一个满足graph-tool要求的——which is gcc 5available via gcc-5 package from salford_systems channel。然后指定--prefix,就像你已经拥有的那样。

    如果您还没有安装other dependencies,或者您需要它们所需的可选功能,您可能还需要安装。

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      相关资源
      最近更新 更多