Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Ascet от Май 15, 2015, 06:16



Название: Проблемы при сборке проекта.
Отправлено: Ascet от Май 15, 2015, 06:16
Извините за расплывчатое название, но не додумался как более точно описать, то с чем сейчас воюю.
Суть такова есть проект, использующий QSerialPort. Так как там где будет запускаться стоит Qt 4.8.3, то QSerialPort я собираю из исходников и тащу с собой в папочке 3rdParty.
У меня стоит Qt 5.4.0 mingw. И под mingw всё подцеплялось и работало, но потом я узнал, что на целевой системе еще и MSVC 2010, и требуются *.lib файлы и тут началось...
Пересобираю QSerialPort под msvc, но при попытке подцепить в про файле статически возникает ошибка
Цитировать
cannot find -lQSerialPort531
Потом я начал пытаться что-то сделать и в процессе обнаружил, что и в mingw сборке всё собирается ТОЛЬКО из того места, где лежало ранее и только теми строками, которые у меня были, когда всё работало
Код:
    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/3rdParty/QSerialPort/lib/ -lQt5SerialPort
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/3rdParty/QSerialPort/lib/ -lQt5SerialPortd
    else:unix:!macx: LIBS += -L$$PWD/3rdParty/QSerialPort/lib/ -lQt5SerialPort

    INCLUDEPATH += $$PWD/3rdParty/QSerialPort/include
    DEPENDPATH += $$PWD/3rdParty/QSerialPort/include

    win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/3rdParty/QSerialPort/lib/libQt5SerialPort.a
    else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/3rdParty/QSerialPort/lib/libQt5SerialPortd.a
    else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/3rdParty/QSerialPort/lib/Qt5SerialPort.lib
    else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/3rdParty/QSerialPort/lib/Qt5SerialPortd.lib
    else:unix:!macx: PRE_TARGETDEPS += $$PWD/3rdParty/QSerialPort/lib/libQt5SerialPort.a

Попытка что-то изменить, например сделать вот такую конструкцию

Код:
CONFIG(release, debug|release): LIBS += -L$$PWD/3rdParty/QSerialPort/lib/ -lQt5SerialPort
CONFIG(debug, debug|release): LIBS += -L$$PWD/3rdParty/QSerialPort/lib/ -lQt5SerialPortd

INCLUDEPATH += $$PWD/3rdParty/QSerialPort/include
DEPENDPATH += $$PWD/3rdParty/QSerialPort/include

CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/3rdParty/QSerialPort/lib/libQt5SerialPort.a
CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/3rdParty/QSerialPort/lib/libQt5SerialPortd.a

Приводит к ошибке
Цитировать
cannot find -lQSerialPortd522

Само собой файлы по указанным адресам есть и libQt5SerialPort и libQt5SerialPortd.

Причем самое обидное, что ошибки потом магическим образом пропадают и проект собирается без ошибок, но при этом не генерирует dll и lib.

Потом я решил попробовать адреса забить не относительные, а абсолютные. И увидел следующие ошибки LNK2019 в количестве 29 штук по штуке на каждую функцию QSerialPort, которая используется в моём проекте.


Можете помочь пожалуйста я не могу понять природу вообще этих ошибок, так и не смог нагуглить откуда берутся эти цифры в конце -lQSerialPortd522 и что они значат. И как вообще делать, чтоб было правильно? Я уже ничего не понимаю, адреса есть я их не руками забиваю, но он всё равно мне выдаёт cannot find. А когда не выдаёт ошибки просто ничего не делает... Помогите пожалуйста очень надо


Название: Re: Проблемы при сборке проекта.
Отправлено: Kurles от Май 15, 2015, 08:14
Попробуй удалить из директории с QSerialPort все .qmake.cache файлы.


Название: Re: Проблемы при сборке проекта.
Отправлено: Ascet от Май 15, 2015, 08:23
Пробовал. Увы не помогает... :(


Название: Re: Проблемы при сборке проекта.
Отправлено: Bepec от Май 15, 2015, 08:39
Т.е. вы пересобираете QtSerialPort под MSVC, а сам Qt собран под minGW?


Название: Re: Проблемы при сборке проекта.
Отправлено: Ascet от Май 15, 2015, 08:44
Ни в коем случае. Именно для этого специально скачал для чистоты эксперимента msvc Qt и установил, хотя в принципе мог просто установить студию и настроить в настройках среды как я понимаю...


Название: Re: Проблемы при сборке проекта.
Отправлено: kuzulis от Май 15, 2015, 10:20
Покамест все неправильно, т.к. правильно делать так:

1. Собирать и устанавливать QtSerialPort отдельно (вики в помощь)
2. Подключать QtSerialPort через CONFIG += serialport (для Qt4)

А про всю эту лапшу что выше лучше забыть.


Название: Re: Проблемы при сборке проекта.
Отправлено: Ascet от Май 15, 2015, 10:56
То есть когда я сделаю библиотечку необходимую заказчику, он потом должен будет себе ставить на каждую машину еще дополнительно QSerialPort? А можно без этого как-то обойтись. Это же элементарно некрасиво


Название: Re: Проблемы при сборке проекта.
Отправлено: Ascet от Май 15, 2015, 11:02
и вообще почему возникает эта ошибка и откуда берутся цифра 522 и 531 кто-нибудь знает?


Название: Re: Проблемы при сборке проекта.
Отправлено: qate от Май 15, 2015, 11:30
для qt4 я использовал QextSerialPort, включил все файлы в свой проект и горя сборки не знал


Название: Re: Проблемы при сборке проекта.
Отправлено: Fat-Zer от Май 15, 2015, 11:33
Код:
CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/3rdParty/QSerialPort/lib/libQt5SerialPort.a
CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/3rdParty/QSerialPort/lib/libQt5SerialPortd.a
дык, а почему .a, если это под msvc конфиг?


Название: Re: Проблемы при сборке проекта.
Отправлено: Ascet от Май 15, 2015, 11:42
Ну это я описываю, что с mingw тоже возникли проблемы. Библиотека подключается только при такой вот большой формулировке, а любой отступление приводит к ошибке cannot find.


Название: Re: Проблемы при сборке проекта.
Отправлено: kuzulis от Май 15, 2015, 13:08
Цитировать
То есть когда я сделаю библиотечку необходимую заказчику, он потом должен будет себе ставить на каждую машину еще дополнительно QSerialPort?

Нет, не нужно ничего ставить,  это нужно ставить только для разработки.

Заказчику обычно отдается инсталлятор, который все установит куда надо (например, все Qt-шные либы и QtSerialPort скопирует в директорию с екзешкой). Да и даже, кто мешает просто ручками скопировать эту QtSerialPort в нужную директорию и отдать заказчику зазипованный архив, или как там задумано (т.к. что так- что эдак она должна быть рядом с екзешкой)?


Название: Re: Проблемы при сборке проекта.
Отправлено: Ascet от Май 18, 2015, 09:29
Ну тут проблема в специфике проекта. Моя задача сделать библиотечку для работы с устройством для лаборатории. То есть есть есть оборудование, которое через COM-порт снимает показания и производит измерения, моя задача написать библиотечку на Qt, которая бы предоставляла удобный интерфейс управления этой железкой и потом лаборатория используя мою библиотечку будет производить расчеты, писать программы, реализующие всю математику и тд. Так что установочного екзешника не будет=(


Название: Re: Проблемы при сборке проекта.
Отправлено: kuzulis от Май 18, 2015, 10:30
Причем тут это все? Это все без разницы, т.к. придется в любом случае таскать с собой и dll-ку QSerialPort... Поэтому проще разрабатывать свою "библиотечку" тогда, когда QSerialPort подключен через CONFIG. Но хозяин - барин..


Название: Re: Проблемы при сборке проекта.
Отправлено: Ascet от Май 20, 2015, 06:01
Ну подключение через конфиг вы имеете в виду через просто QT += serialport?
Ну тогда это подразумевает, что заказчик потом еще должен будет брать qt-qserialport собирать, устанавливать к остальным библиотечкам Qt. И так на каждой машине. Это ну элементарное неуважение - заставлять заказчика помимо вашего софта еще производить кучу других действий.

Решение найдено - знакомый посоветовал MSVC окружение просто поднять под отдельной виртуалкой и всё завелось.