Intereting Posts
Ранжирование памяти как повышение безопасности приложений? Не удается получить доступ к векторному iteratorу std _Ptr на Mac Связывание / компиляция программы, которая использует boost / filesystem.hpp Сортировка вектора объектов Инициализировать вектор векторов, используя структуру как тип данных в c ++ C ++ static const доступ через указатель NULL Перейти к началу страницы Разрешено ли писать в stream, когда он не открыт в c ++ Статический polymorphism с CRTP: использование базового classа для вызова производных методов Путаница о перегрузке функций c ++ Почему C ++ никогда не разрешало использовать функции до их объявления? Система :: Окна :: Forms :: Форма :: ShowDialog () Получение индекса аргумента при распаковке списка аргументов с шаблонами Variadic Есть ли эквивалент g ++ для Visual Studio __declspec (новичок)? Почему люди пишут получатели частного поля, возвращающие неконстантную ссылку?

Qt 5.4 static build создает ошибку неразрешенного внешнего символа в Visual Studio 2013

Я хочу использовать статическую сборку Qt 5.4. Поскольку нет предустановленной статической сборки, вы должны сами создать ее из исходного кода Qt.

Моя среда:

  • Windows 7 x64
  • Обновление Visual Studio 2013 Ultimate Update 4
  • Надстройка Visual Studio Qt5 1.2.4
  • Установлен ActivePerl / ActivePython (требуется для создания источника Qt)

Моя процедура была следующей (см. Qt Documentation> Qt 5.4> Qt для Windows – Создание из источника):

Все это проходит без ошибок.

Затем в Visual Studio я изменил Qt-версию существующего проекта Qt на D:\Qt\qt-5.4.0-x86-msvc2013-compact-static как это была папка вывода описанной выше процедуры.

Тем не менее, теперь я получаю массу неразрешенных символьных ошибок следующего вида (build configuration «release»):

 error LNK2001: unresolved external symbol "__imp__glBindTexture@8". Qt5Gui.lib(qopenglfunctions.obj) ... error LNK2001: unresolved external symbol "_hb_blob_create". Qt5Gui.lib(qharfbuzzng.obj) ... error LNK2001: unresolved external symbol "_hb_face_create_for_tables". Qt5Gui.lib(qharfbuzzng.obj) .... error LNK2001: unresolved external symbol "_WSAAsyncSelect@16". Qt5Core.lib(qeventdispatcher_win.obj) 

Совместная библиотека / динамическая компоновка ссылок с аналогичными параметрами ( -platform win32-msvc2013 -opengl desktop -no-icu -skip webkit ) работает отлично.

Что я делаю неправильно?


Обновление 6 января:

1) Как уже упоминалось в комментариях, это может быть ошибкой в ​​Qt, поэтому я создал отчет об ошибке (QTBUG-43636), а позже обнаружил, вероятно, связанную ошибку (QTBUG-38913). (Извините, я могу разместить не более 2 ссылок)

2) Я узнал (спасибо karlphillip), что вы можете уменьшить количество сообщений об ошибках, если вы добавите некоторые библиотеки в свои дополнительные зависимости в Visual Studio

  • Ws2_32.lib разрешает одно сообщение об ошибке (из 103)
  • opengl32.lib разрешает 47 сообщений об ошибках

Это означает, что теперь осталось только « 55 сообщений об ошибках» . Может быть, еще не хватает библиотек?

Я нашел решение:

Вы должны добавить следующие библиотеки в свои дополнительные зависимости в Visual Studio:

Ws2_32.lib opengl32.lib qtharfbuzzng.lib

Затем мой проект окончательно скомпилирован.

Однако это не конец истории:

Несмотря на успешную компиляцию, мое приложение показало следующее сообщение об ошибке при запуске:

Это приложение не удалось запустить, поскольку оно не могло найти или загрузить плагин платформы Qt «windows».

Чтобы решить эту проблему, вам нужно добавить еще больше библиотек в свои дополнительные зависимости:

imm32.lib winmm.lib Qt5PlatformSupport.lib qwindows.lib

… и следующие в ваши дополнительные библиотечные каталоги:

$(QTDIR)\plugins\platforms

… и следующее к вашему исходному коду:

 #include  Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) 

Готово! Наконец, я смог связать себя со статическими Qt-библиотеками.

Это стоило усилий:

Время холодного запуска моего приложения значительно улучшилось примерно с 10 секунд до менее 1 секунды. И вместо 14 МБ DLL-файлов мне нужно только развернуть один 8 МБ EXE-файл.