У меня есть проект с большим компонентом на C++, который я смог успешно скомпилировать с clang на OSX (версия LLVM версии 6.1.0 (clang-602.0.49) (на основе LLVM 3.6.0svn .) Поскольку OSX не обеспечивает Fortran компилятор я установил gfortran через HomebrewСсылка OSX Homebrew Gfortran против libC++
компиляции работает отлично, однако я не могу связать скомпилированный 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++? Возможно ли это с помощью gfortran, предоставленного Homebrew? Какой был бы лучший способ решения этой проблемы? Должен ли я попытаться установить связь с clang ++?
Вы попробовали '-lstdC++'? –
Мне нужно было добавить -lC++ к компоновщику (см. Ответ ниже). – Pascal
Я предположил, что вы пробовали это раньше ... –