Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

C++ Qt - неразрешенный внешний символ

#cpp #qt


Сразу хочу сказать, что это я читал: Ссылка на неразрешенный внешний символ (возможные
причины)
Однако проблемы с классами Qt(который, по идее, свои библиотеки линкует автоматически)

Несколько ошибок:


  testclass.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport)
public: __cdecl QTcpSocket::QTcpSocket(class QObject *)" (__imp_??0QTcpSocket@@QEAA@PEAVQObject@@@Z)
в функции "public: __cdecl TestClass::TestClass(class QString)" (??TestClass@@QEAA@VQString@@@Z)
  
  testclass.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport)
public: virtual __cdecl QTcpSocket::~QTcpSocket(void)" (__imp_??1QTcpSocket@@UEAA@XZ)
в функции "public: virtual void * __cdecl QTcpSocket::`scalar deleting destructor'(unsigned
int)" (??_GQTcpSocket@@UEAAPEAXI@Z)
  
  testclass.obj:-1: ошибка: LNK2001: неразрешенный внешний символ ""public: virtual
bool __cdecl QAbstractSocket::atEnd(void)const " (?atEnd@QAbstractSocket@@UEBA_NXZ)"


И прочие ошибки в том же стиле. Кто может сказать, что не так с include-ами?

#include 
#include 
#include 
#include 
#include "testclass.h"


Пробовал подключать еще QAbstactSocket, не особо помогло (к слову он напрямую в коде
не используется)
    


Ответы

Ответ 1



Подключение библиотеки в C++ делается в два этапа: для компилятора - пишется нужный #include для компоновщика - дописывается соответствующий параметр командной строки В Qt за параметры командной строки отвечает система сборки. Ей управляет файл проекта с расширением pro. В нем есть директива QT= core gui [...]. Чтобы стали доступны сетевые функции, туда нужно дописать network Чтобы библиотека вошла в состав exe, нужно компоновать проект с Qt статически. Для этого требуется: соблюсти условия LGPL (опубликовать объектные файлы) собрать Qt статически, что является нетривиальной задачей. Для Windows Чтобы подготовить комплект dll для выпуска exe, существует утилита windeployqt, входящая в состав Qt. Статья о ней. Для Linux Все зависит от целевого дистрибутива. В общих чертах, вы распространяете только ваш бинарник, а в пакете указываете зависимости от нужных библиотек. Остальное решает система управления зависимостями дистрибутива. Для Mac Аналогично Windows, только утилита называется macdeployqt Еще одна статься о подготовке к релизу

Комментариев нет:

Отправить комментарий