【发布时间】: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 链接已经解决了这个问题。谢谢!!!