Статическая линковка сторонней библиотеки Qt (QtSerialPort)

Оказывается, статическое связывание работало, но только для библиотек Qt. Моя сторонняя библиотека QtSerialPort статически не связывается. После некоторого исследования я обнаружил, что мне нужно либо строить эту библиотеку статически, либо мне нужно напрямую ссылаться на файл .pri в моем файле .pro.

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

Метод .pri, которого я действительно не понимаю, и был смутно описан в этих двух ссылках:
http://qt-project.org/forums/viewthread/15223
http://www.qtcentre.org/archive/index.php/t-54505.html

У кого-нибудь есть какие-либо советы о том, как заставить любой из этих методов работать? Или, возможно, другой метод?

Кроме того, MSVCP100.dll не связывает статически, если кто-нибудь может дать мне какой-либо совет по этому поводу.

================================================== ================================

Я пытаюсь заставить Qt статически связывать библиотеки, чтобы я мог создать отдельное приложение. Я следовал различным учебникам о том, как построить Qt статически, а затем создать статическое приложение, но мне не очень повезло. Я считаю, что я успешно построил Qt со статической связью, потому что размер приложения увеличился с 79 КБ до 7 + МБ, но я все еще получаю сообщения об ошибках, в которых отсутствуют QtCore4.dll и QtSerialPort.dll. Кроме того, еще одна проблема, возникающая при использовании статической конфигурации, которая не слишком серьезна, заключается в том, что когда я закрываю свою программу, Windows думает, что она потерпела крах, и выдает окно с сообщением о том, что MyProgram.exe перестал работать …

Я на Windows-компьютере использую MSVC 2010 с Qt 4.8.5 и использую стороннюю библиотеку QtSerialPort.

Что я сделал в соответствии с руководствами, которые я читал:

Загрузите и распакуйте qt-everywhere-opensource-src-4.8.5.zip
Откройте /mkspec/mwin32-msvc2010/qmake.conf и измените следующие строки на

CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target

а также

QMAKE_CLFAGS_RELEASE = -O2 -MT

Затем я открываю командную строку MSVC2010 и перехожу к этому. Затем я ввожу команды

configure -static -release -platform win32-msvc2010
nmake sub-src

После этого я открываю свой проект и добавляю

CONFIG += static

в файл .pro. Затем в QtCreator я захожу в проекты, управляю наборами, затем в версии Qt и просматриваю созданный мною qMake. Я добавляю новый комплект с этой версией qMake. Затем я очищаю все и переключаюсь на этот новый набор и запускаю qmake из QtCreator. Затем я использую командную строку msvc2010, чтобы перейти в каталог, где создаются файлы, а затем

nmake release

Это создает довольно большой .exe, но, как я уже сказал, это все еще зависит от пары .dll.

5

Решение

Для статического связывания с внешней библиотекой есть пара вариантов, оба имеют свои плюсы и минусы.

I. Соберите библиотеку для статического связывания самостоятельно. Ссылка на это.

  1. Ищите возможные существующие конфигурационные переключатели для статического связывания. Там может быть что-то вроде QTSERIALPORT_STATIC = noи т. д. в библиотеке .pro/.pri файлы. Просто скажи yes для библиотеки, чтобы скомпилировать статическое связывание и перейти к шагу 4!

  2. В .pro/.pri замена файла CONFIG += dll с CONFIG += static,

  3. Удалить экспортные декларации из библиотеки. Обычно символы библиотеки Qt объявляются с определением вроде QTSERIALPORT_EXPORT который расширяется до Q_DECL_EXPORT/Q_DECL_IMPORT в сборке разделяемой библиотеки / использование ее заголовочных файлов при компоновке. Вам нужно найти где это QTSERIALPORT_EXPORT определено и замените его пустым определением:

    #define QTSERIALPORT_EXPORT // in source file
    

    или же

    DEFINES += QTSERIALPORT_EXPORT # in .pro/.pri file
    
  4. Постройте библиотеку.

  5. Ссылка на библиотеку .lib/.a файл, используйте заголовочные файлы библиотеки для объявлений символов в вашем проекте.

II. Включите исходные файлы библиотеки в свой проект и скомпилируйте их в нем (вообще никаких ссылок).

  1. Включите все исходные файлы библиотеки в свой проект (добавьте в SOURCES в файле проекта qmake)

  2. Определите все вещи, от которых зависит библиотека (другие библиотеки, опции Qt и т. Д.), И включите их также в свой .pro файл.
    ИЛИ ЖЕ
    Включите правильное .pri файл в ваш .pro если автор библиотеки предоставляет его для компиляции в проекте (т.е. include(QtSerialPort.pri) или что-то.)

  3. Удалите объявления экспорта / импорта из исходного кода библиотеки — как описано в пункте 3 части I.

  4. Создайте свой проект.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]