Я пытаюсь скомпилировать код от третьего лица, которое, как я знаю, работало на другом компьютере с этим установленным:
- 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);