Как я могу скомпилировать и исправить эту ошибку привязки в Ubuntu? - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь скомпилировать код от третьего лица, которое, как я знаю, работало на другом компьютере с этим установленным:

  • CentOS 6 64-разрядная
  • GCC с полной поддержкой C ++ 14. Они использовали 5.3.1
  • ядро ​​2.6.30
  • glibc 2.12

Теперь у меня есть:

  • Ubuntu 18.04.2 LTS
  • gcc (Ubuntu 7.3.0-27ubuntu1 ~ 18.04) 7.3.0
  • Ядро 4.15.0-46-generic # 49-Ubuntu
  • ldd (Ubuntu GLIBC 2.27-3ubuntu1) 2.27

И когда я пытаюсь скомпилировать следующий, я получаю эту ошибку: Error

src/datasource.cpp: In constructor ‘DataLoop::DataLoop(std::shared_ptr<shaga::INI>, std::shared_ptr<libattach::LocalAttach>)’:
src/datasource.cpp:103:93: error: no matching function for call to ‘libattach::LocalAttach::set_receive_callback(std::_Bind_helper<false, void (DataLoop::*)(std::__cxx11::list<shaga::Chunk>&&), DataLoop*, const std::_Placeholder<1>&>::type)’
  _attach->set_receive_callback (std::bind (&DataLoop::callback, this, std::placeholders::_1));
                                                                                             ^
In file included from /usr/local/include/libattach/common.h:129:0,
                 from /usr/local/include/libattachlite.h:23,
                 from src/internal.h:15,
                 from src/datasource.cpp:6:
/usr/local/include/libattach/localattach.h:156:9: note: candidate: void libattach::LocalAttach::set_receive_callback(libattach::RECEIVE_CALLBACK)
    void set_receive_callback (RECEIVE_CALLBACK func);
         ^~~~~~~~~~~~~~~~~~~~
/usr/local/include/libattach/localattach.h:156:9: note:   no known conversion for argument 1 from ‘std::_Bind_helper<false, void (DataLoop::*)(std::__cxx11::list<shaga::Chunk>&&), DataLoop*, const std::_Placeholder<1>&>::type {aka std::_Bind<void (DataLoop::*(DataLoop*, std::_Placeholder<1>))(std::__cxx11::list<shaga::Chunk>&&)>}’ to ‘libattach::RECEIVE_CALLBACK {aka std::function<void(shaga::Chunk&&)>}’

Мне кажется, проблема связана с bind и версией Ubuntu . Кто-нибудь может мне помочь? Спасибо.

Этот код относится к части ошибки:

datasource.cpp

#include "internal.h"

using namespace shaga;
using namespace libattach;

extern Gfx *_gfx;


void DataLoop::callback (shaga::CHUNKLIST &&clist)
{
    (void) clist;
//  for_each (clist.cbegin (), clist.cend (), [this](const Chunk &chunk) {
//          P::printf ("-> %s chunk '%s', %s, id %" PRIX32 ", ttl %" PRIu8, chunk.get_prio_text ().c_str (), chunk.get_type ().c_str (), chunk.get_trustlevel_text ().c_str (), chunk.get_hwid (), chunk.get_ttl ());
//  });
}

void DataLoop::tick (const uint64_t msec)
{
    P::printf ("tick %" PRIu64, msec);
}

DataLoop::DataLoop (std::shared_ptr<shaga::INI> ini, std::shared_ptr<libattach::LocalAttach> attach) :
    _ini (ini), _attach (attach), _epoll_fd (-1), _gpio_power_status_fd (-1), _gpio_power_control_fd (-1)
{
    _is_signal.store (false);

    _attach->set_receive_callback (std::bind (&DataLoop::callback, this, std::placeholders::_1));
    _attach->set_receive_tick (std::bind (&DataLoop::tick, this, std::placeholders::_1));

localattach.h

#ifndef _HEAD_libattach_LocalAttach
#define _HEAD_libattach_LocalAttach

#ifdef OS_LINUX

#include <sys/epoll.h>

namespace libattach {

    typedef std::function<void(const uint64_t ms)> TICK_CALLBACK;
    typedef std::function<void(const bool connected, const std::string &ident)> CONNSTATUS_CALLBACK;
    typedef std::function<void(shaga::Chunk &&)> RECEIVE_CALLBACK;
    typedef std::function<void(const shaga::HWID hwid, const MAI_ROLE role, const uint32_t id, const size_t distance)> NEWCLIENT_CALLBACK;

    class LocalAttach {
        public:

            RECEIVE_CALLBACK _in_callback_func {nullptr};

            void set_receive_callback (RECEIVE_CALLBACK func);
...