Russian Qt Forum
Ноябрь 25, 2024, 15:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы при сборке проекта.  (Прочитано 7202 раз)
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. А когда не выдаёт ошибки просто ничего не делает... Помогите пожалуйста очень надо
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Май 15, 2015, 08:14 »

Попробуй удалить из директории с QSerialPort все .qmake.cache файлы.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Ascet
Гость
« Ответ #2 : Май 15, 2015, 08:23 »

Пробовал. Увы не помогает... Грустный
Записан
Bepec
Гость
« Ответ #3 : Май 15, 2015, 08:39 »

Т.е. вы пересобираете QtSerialPort под MSVC, а сам Qt собран под minGW?
Записан
Ascet
Гость
« Ответ #4 : Май 15, 2015, 08:44 »

Ни в коем случае. Именно для этого специально скачал для чистоты эксперимента msvc Qt и установил, хотя в принципе мог просто установить студию и настроить в настройках среды как я понимаю...
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Май 15, 2015, 10:20 »

Покамест все неправильно, т.к. правильно делать так:

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

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

ArchLinux x86_64 / Win10 64 bit
Ascet
Гость
« Ответ #6 : Май 15, 2015, 10:56 »

То есть когда я сделаю библиотечку необходимую заказчику, он потом должен будет себе ставить на каждую машину еще дополнительно QSerialPort? А можно без этого как-то обойтись. Это же элементарно некрасиво
Записан
Ascet
Гость
« Ответ #7 : Май 15, 2015, 11:02 »

и вообще почему возникает эта ошибка и откуда берутся цифра 522 и 531 кто-нибудь знает?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #8 : Май 15, 2015, 11:30 »

для qt4 я использовал QextSerialPort, включил все файлы в свой проект и горя сборки не знал
Записан
Fat-Zer
Гость
« Ответ #9 : Май 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 конфиг?
« Последнее редактирование: Май 15, 2015, 11:36 от Fat-Zer » Записан
Ascet
Гость
« Ответ #10 : Май 15, 2015, 11:42 »

Ну это я описываю, что с mingw тоже возникли проблемы. Библиотека подключается только при такой вот большой формулировке, а любой отступление приводит к ошибке cannot find.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #11 : Май 15, 2015, 13:08 »

Цитировать
То есть когда я сделаю библиотечку необходимую заказчику, он потом должен будет себе ставить на каждую машину еще дополнительно QSerialPort?

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

Заказчику обычно отдается инсталлятор, который все установит куда надо (например, все Qt-шные либы и QtSerialPort скопирует в директорию с екзешкой). Да и даже, кто мешает просто ручками скопировать эту QtSerialPort в нужную директорию и отдать заказчику зазипованный архив, или как там задумано (т.к. что так- что эдак она должна быть рядом с екзешкой)?
« Последнее редактирование: Май 15, 2015, 13:11 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Ascet
Гость
« Ответ #12 : Май 18, 2015, 09:29 »

Ну тут проблема в специфике проекта. Моя задача сделать библиотечку для работы с устройством для лаборатории. То есть есть есть оборудование, которое через COM-порт снимает показания и производит измерения, моя задача написать библиотечку на Qt, которая бы предоставляла удобный интерфейс управления этой железкой и потом лаборатория используя мою библиотечку будет производить расчеты, писать программы, реализующие всю математику и тд. Так что установочного екзешника не будет=(
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #13 : Май 18, 2015, 10:30 »

Причем тут это все? Это все без разницы, т.к. придется в любом случае таскать с собой и dll-ку QSerialPort... Поэтому проще разрабатывать свою "библиотечку" тогда, когда QSerialPort подключен через CONFIG. Но хозяин - барин..
Записан

ArchLinux x86_64 / Win10 64 bit
Ascet
Гость
« Ответ #14 : Май 20, 2015, 06:01 »

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

Решение найдено - знакомый посоветовал MSVC окружение просто поднять под отдельной виртуалкой и всё завелось.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 23.