Совместимость строк boost.python для gcc 5.2.0

Функция, которая принимает std::string ввод, не может быть корректно представлена ​​через boost.python с gcc/5.2.0; в то время как gcc 4.8.3 работает нормально.

p.s. Я использую готовый libboost_python.so.1.63.

Код C++

#include <boost/python.hpp>
#include <iostream>
using namespace boost::python;

void func(const std::string & hi)
{
    std::cout<<hi<<std::endl;
}

BOOST_PYTHON_MODULE(example)
{
  def("func", &func);
}

Выполнение Python

>>> from example import *
>>> func("hi")
Boost.Python.ArgumentError: Python argument types in
    example.func(str)
did not match C++ signature:
    func(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >)

person Alex Pai    schedule 21.12.2018    source источник
comment
Я думаю, что это правильный дубликат: stackoverflow.com/questions/45417707/   -  person Matthieu Brucher    schedule 21.12.2018
comment
Спасибо. И -D_GLIBCXX_USE_CXX11_ABI=0, и #define _GLIBCXX_USE_CXX11_ABI 0 работают. Есть ли побочный эффект для этого?   -  person Alex Pai    schedule 21.12.2018
comment
Да, это означает, что вы используете старую версию ABI libstdc++. Но это то, что используют такие дистрибутивы, как RH6, поэтому вам нужен флаг, чтобы получить совместимость.   -  person Matthieu Brucher    schedule 21.12.2018