gpt4 book ai didi

macos - 将 OSX Homebrew Gfortran 与 libc++ 链接起来

转载 作者:行者123 更新时间:2023-12-04 19:59:11 25 4
gpt4 key购买 nike

我有一个包含大型 C++ 组件的项目,我能够在 OSX(Apple LLVM 版本 6.1.0(clang-602.0.49)(基于 LLVM 3.6.0svn)上成功编译该组件。由于 OSX 不提供 Fortran编译器我通过 Homebrew 安装了 gfortran。

编译工作正常,但是我无法将编译的 Fortran 代码与之前编译的 C++ 代码链接起来:我收到以下错误:

$ make fortran
Undefined symbols for architecture x86_64:
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(char const*) const", referenced from:
DataFieldInfo::FromJSON(JSONNode const&) in [...]
"std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
std::__1::vector<char, std::__1::allocator<char> >::allocate(unsigned long) in [...]
void std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__push_back_slow_path<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in [...]
void std::__1::vector<JSONNode, std::__1::allocator<JSONNode> >::__push_back_slow_path<JSONNode const>(JSONNode const&) in [...]
[...]

这向我表明我在 Fortran 和 C++ 部分之间存在链接问题。

如何将 Fortran 部分与 libc++ 链接? Homebrew 提供的 gfortran 是否可以做到这一点?解决此问题的最佳行动方案是什么?我应该尝试与 clang++ 链接吗?

最佳答案

您需要明确告诉 gfortran 链接到 clangs c++ 库(它将默认为 GNU c++ 库)。

例如,如果你有一个 Fortran 和 C++ 文件,每个文件都用各自的编译器编译(注意:gfortran-mp-5 是 macports 提供的 GNU Fortran 5.1)

gfortran-mp-5 -c gfortest.f90
clang++ -c clangtest.cc

您可以将生成的对象与 gfortran 链接在一起,如下所示:
gfortran-mp-5 -lc++ -o test-f gfortest.o clangtest.o
-lc++标志告诉 gfortran 在 libc++ 中链接,这将解决您 undefined symbol 。

关于macos - 将 OSX Homebrew Gfortran 与 libc++ 链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30174180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com