【问题标题】:Compilation error on Linux but not on MacOSXLinux 上的编译错误,但 MacOSX 上没有
【发布时间】:2023-11-09 06:32:01
【问题描述】:

我正在尝试编译一个用 C++ 编码的程序。它在 Mac OSX 上完美编译,但在 Linux 上失败。我一直在尝试运行在 Linux 上的两个独立集群,但都无法在两者上编译。

这是我得到的错误:

src/LCEcomposite.cc:513: error: no matching function for call to ‘find(__gnu_cxx::__normal_iterator >>, __gnu_cxx::__normal_iterator >>, unsigned int&)'

这是导致问题的代码行(LCEcomposite.cc 中的第 513 行)

if(find(_TraitIndices.begin(), _TraitIndices.end(), i) == _TraitIndices.end()) {

这是 Linux 上的make 版本

gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) 

这是 Linux 上的 gcc 版本

GNU Make 3.81
This program built for x86_64-redhat-linux-gnu

这是uname -a的输出

Linux seawolf2 2.6.32-358.18.1.el6.x86_64 #1 SMP Wed Aug 28 17:19:38 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

【问题讨论】:

  • 您是否在代码中明确包含
  • 这不是我的代码,这是一个大软件,几分钟前问过作者,但还没有得到答复。我在LCEcomposite.cc 中搜索了algorithm,但没有任何匹配项。它能回答你的问题吗?
  • 是的。它可能是在 MacOSX 上的工具(例如 XCode)下构建的。因此系统包含了该库,开发者没有注意到它的必要性。但是当手动编译时,这必须在代码上。或者 Apple 的编译器 (LLVM) 也会自动执行此操作。
  • 您需要更新版本的GCC。请注意,GCC 5.1 刚刚发布(2015 年 4 月 22 日)。下载其源代码并构建并安装它。
  • @BasileStarynkevitch 为什么他需要更新版本的 GCC? findalgorithm 标头中,对于他正在使用的 GCC 版本,甚至更旧的版本,应该可以完美编译。

标签: c++ linux gcc compilation compiler-errors


【解决方案1】:

将此添加到您的代码中:

#include <algorithm>

我猜,Mac 还是包含了标题,这就是它在那里工作的原因。

【讨论】:

  • 我注意到一些编译器会为你包括算法之类的东西,但新版本的 gcc 已经停止这样做了。从完整性的角度来看,我觉得编译器为您包含头文件是错误的。它应该强制你包含你需要的头文件,这样无论使用什么编译器,你的代码都是完整的。
  • 我第一次使用Mac时遇到了和OP一样的问题。是的,这很糟糕,因为它可以在你的机器上运行,然后你将项目发送给 TA,他说,你的代码没有编译,你想让我做什么?是的,(s)他是对的! ;)
  • 我在这个问题上花了很多时间!非常感谢你的帮助。并感谢您的简短解释。
最近更新 更多