【问题标题】:Trying to compile a C++ code with Root (Cern) parameters included尝试编译包含 Root (Cern) 参数的 C++ 代码
【发布时间】:2016-11-05 23:16:39
【问题描述】:

我正在尝试在我的 Mac 上编译用 C++ 和 Root 编写的代码。代码来自一位在 Linux 笔记本电脑上工作的同事。除了不同的操作系统,我的 gcc 和 Root 版本都与她不同,我不确定是哪个不同导致代码无法在我的机器上编译。

她有 g++ 4.8 和 root 5.(东西)。我有 gcc 5.3.0 和 root 6.06/02。

她给了我一行代码,她用来让她的机器编译代码

gcc -Wall -o executable_name code_name.cc `root-config --cflags --glibs`

但是当我在我的机器上写字时,终端给了我错误

gcc: error: unrecognized command line option ‘-stdlib=libc++’
gcc: error: unrecognized command line option ‘-stdlib=libc++’

我需要帮助生成正确的行来让 gcc 编译代码。

【问题讨论】:

  • 你试过用g++代替gcc吗?你的代码是在一个名为code_name.cc 的文件中,还是应该用实际的文件名替换该部分?
  • 我有,都给出同样的错误。而且,是的,代码被命名为不同的东西,我已经用正确的代码替换了所有适当的地方。
  • 真的在使用 GCC 吗?这不是 Clang 别名吗?你从例如得到什么输出? g++ --version?
  • gcc (GCC) 5.3.0 版权所有 (C) 2015 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有保修;甚至不是为了适销性或适合特定目的。
  • @SarahStern 您必须使用 正确 源路径。 当前工作目录中是否有一个名为2016_july.cc的文件?

标签: c++ gcc root-framework


【解决方案1】:

这里的问题有两个:你在 OSX 上,你在使用 GCC。

问题在于root-config 假定由于您使用的是 OSX,您将使用具有 -stdlib 标志的 OSX 标准 Clang 编译器。由于您使用的不是 Clang,而是 GCC(没有此标志),因此您会收到错误消息。

您有两种可能的解决方案:使用clang++ 而不是g++ 进行编译和构建(如果尚未安装编译器,则需要安装编译器,它与Xcode 一起提供),或者修改root-config 脚本以便它没有添加-stdlib=libc++root-config 脚​​本检查的环境变量或标志可能会改变行为,但我对脚本一无所知,您必须检查它。

【讨论】:

  • 谁能告诉我如何修改root-config 脚本使其不添加-stdlib=libc++?鉴于我正在尝试与我的同事合作,我不想离开 g++。
  • @SarahStern GCC 和 Clang 大部分是兼容的,只要您使用标准 C++,您就可以使用您想要的任何 C++ 编译器。由于您的同事似乎使用的是相当旧的 GCC 版本,因此使用最近的 Clang 应该不会有任何问题。只需尝试使用clang++ 来构建,看看会发生什么。
  • 试试这个看看会发生什么
  • 好吧,这种做法。 ` *** Break *** 分段违规正在生成堆栈跟踪... 0x000000010385fdcc in std::__1::basic_ostream >& std::__1::operator >(std::__1::basic_ostream >&, char const*) (in name) + 4 0x000000010385fc9d in main (in名称)+ 125 0x00007fff8d2125ad 在开始(在 libdyld.dylib 中)+ 1` 不知道从这里去哪里。
  • @SarahStern 至少你现在可以构建这个程序了。崩溃是一个完全不同的问题,如果您的同事不知道它可能是什么,那么您应该就该问题提出不同的问题(并在问题正文中包含完整的堆栈跟踪)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多