【问题标题】:Using -std=c++0x with gfortran将 -std=c++0x 与 gfortran 一起使用
【发布时间】:2013-11-06 04:26:22
【问题描述】:

我有一个使用 C、C++ 和 Fortran 的大型程序。我一直发现使用“gfortran”前端最容易正确链接,即使我的主要语言是 C。gfortran 知道很多需要链接的 Fortran 特殊内容。

然而,现在我需要包含unordered_map,我的编译器(Mac OS X 10.7.5 上的 gcc 4.4.1)似乎需要-std=c++0x 选项。我通过仅使用 C++ 编译一个小型测试程序发现并验证了这一点。

但如果我在 gfortran 中使用 -std=c++0x 选项,则会产生大量链接错误,开头为:

Undefined symbols for architecture i386:
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::data() const", referenced from:

同时,如果我回到我的大程序,并用 g++ 或 gcc 替换 gfortran,我也会收到大量链接错误,开头是:

Undefined symbols for architecture i386:
  "__gfortran_compare_string", referenced from:

【问题讨论】:

  • 尝试与g++ 链接并传递-lgfortran。这应该可以解决未定义的 Fortran 内容。
  • 传递-lstdc++ 有帮助吗?您的错误似乎源于 gfortran(正确地)没有链接到标准 C++ 库(或者,在使用 g++ 时,没有链接到 Fortran 库 - 正如 Ali 指出的那样,这可以通过将 -lgfortran 传递给 g++ 来完成)。跨度>
  • 使用 g++ 和 -lgfortran 链接已经解决了这个问题。谢谢!!!

标签: c++ c++11 gfortran


【解决方案1】:

我现在使用 g++ 与 -lgfortran 开关链接,这让我可以使用 -std=c++0x 并且不会给我留下未定义的 c++ 或 fortran 符号。

【讨论】:

  • 顺便说一句,是时候(从 2 年前开始)使用 -std=c++11 而不是 -std=c++0x
猜你喜欢
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 2015-06-21
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
相关资源
最近更新 更多