Использование proto в Qt

114
12 декабря 2019, 23:40

Задача: подключиться с вебсокету livecoin.net (https://github.com/lvcn1/ws-client-examples)

Путь к решению:

  1. Установил protobuf:
vcpkg.exe install protobuf protobuf:x64-windows
  1. Скачал из репозитория LivecoinWSapi.proto:
https://github.com/lvcn1/ws-client-examples/blob/master/proto/LivecoinWSapi.proto
  1. Скомпилировал proto-файл:
protoc --cpp_out=. LivecoinWSapi.proto
  1. Подключил заголовочные файлы к проекту:
INCLUDEPATH += D:/programs/vcpkg/installed/x64-windows/include
LIBS += -LD:/programs/vcpkg/installed/x64-windows/bin -llibprotobuf -llibprotoc
  1. И написал 2 строки для теста:
#include "network/LivecoinWSapi.pb.h"
#include <QApplication>
using namespace protobuf::ws;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    SubscribeTradeChannelRequest message;
    message.set_currency_pair("BTC/ETH");
    return a.exec();
}

Результат: Однако при компиляции ловлю ошибку на каждом использовании proto::ws:

ошибка: undefined reference to `protobuf::ws::SubscribeTradeChannelRequest::SubscribeTradeChannelRequest()`
ошибка: undefined reference to `protobuf::ws::SubscribeTradeChannelRequest::~SubscribeTradeChannelRequest()`
ошибка: undefined reference to `protobuf::ws::SubscribeTradeChannelRequest::~SubscribeTradeChannelRequest()`
ошибка: undefined reference to `google::protobuf::internal::fixed_address_empty_string[abi:cxx11]`
collect2.exe:-1: ошибка: error: ld returned 1 exit status

Использую:

  • Qt 5.12.1
  • MinGW 7.3 64-bit
  • libprotoc 3.6.1
  • vcpkg 2018.11.23-nohash

UPD 1: Решил попробовать CMake, вместо qmake.

  • cкачал последнюю версию cmake, подключил к Qt.
  • скачал минимальный пример proto с использованием cmake (https://github.com/ttroy50/cmake-examples/tree/master/03-code-generation, https://github.com/shaochuan/cmake-protobuf-example)

Но при использовании компилятора MinGW ошибка: target pattern contains no '%'. Stop. Компилятор MSVC:

ninja: error: 'C:/Users/user/Documents/protobuf-test/protobuf/protobuf::protoc', needed by 'AddressBook.pb.cc', missing and no known rule to make it
Answer 1

Сгенерированный cpp нужно добавить в проект

READ ALSO
QMetaProperty::read: Unable to handle unregistered datatype &#39;QObjectList&#39;

QMetaProperty::read: Unable to handle unregistered datatype 'QObjectList'

Ошибка: QMetaProperty::read: Unable to handle unregistered datatype 'QObjectList' for property 'ViewshedGeoElement_QMLTYPE_43::PointLogLag'

119
Создание объектов класса с++

Создание объектов класса с++

Предположим, существует некоторый класс foo с конструктором по умолчаниюВ main() происходит его создание

125
Не устанавливается Microsoft Visial Studio 2017

Не устанавливается Microsoft Visial Studio 2017

Пытаюсь установить MSVS 2017На этапе установки SDK установщик начинает требовать какие-то пакеты

112