Преобразование std:: cxx11:: string в std:: string


Я использую c++11, но также некоторые библиотеки, которые не настроены для него, и нуждаются в некотором преобразовании типа. В частности мне нужен способ конвертировать std::__cxx11::string обычных std::string, но погуглив я не могу найти способ сделать это и положить (string) спереди не работает.

если я не конвертирую я получаю ошибки компоновщика, как это:

undefined reference to `H5::CompType::insertMember(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, H5::DataType const&) const'
4 59

4 ответа:

возможно ли, что вы используете GCC 5?

Если вы получаете ошибки компоновщика о неопределенных ссылках на символы, которые включают типы в пространстве имен std::__cxx11 или теге [abi:cxx11], то это, вероятно, указывает на то, что вы пытаетесь связать вместе объектные файлы, которые были скомпилированы с различными значениями для макроса _GLIBCXX_USE_CXX11_ABI. Это обычно происходит при связывании со сторонней библиотекой, которая была скомпилирована с более старой версией GCC. Если третья сторона библиотека не может быть перестроена с новым ABI, то вам нужно будет перекомпилировать код со старым ABI.

источник: примечания к выпуску GCC 5 / Dual ABI

определение следующего макроса до включая любые стандартные заголовки библиотеки должны решить вашу проблему:#define _GLIBCXX_USE_CXX11_ABI 0

Если вы можете перекомпилировать все несовместимые библиотеки, которые вы используете, сделайте это с параметром компилятора

- D_GLIBCXX_USE_CXX11_ABI=1

а затем перестроить свой проект. Если вы не можете этого сделать, Добавьте в свой проект параметр компилятора makefile

-D_GLIBCXX_USE_CXX11_ABI=0

определение

#define _GLIBCXX_USE_CXX11_ABI 0/1

также хорошо, но вам, вероятно, нужно добавить его в все ваши файлы в то время как опция компилятора делает это для всех файлов сразу.

Я получил это, единственный способ, который я нашел, чтобы исправить это было обновить все mingw-64 (я сделал это с помощью pacman на msys2 для вашей информации).

для меня-D_GLIBCXX_USE_CXX11_ABI=0 не помогло.

Он работает после того, как я связался с версией c++ libs вместо gnustl.