Использование зависимостей Qt, чтобы избежать дублирования двоичных файлов - PullRequest
0 голосов
/ 11 ноября 2018

Qt использует множество сторонних библиотек для кодирования изображений, сжатия, шифрования, поддержки аудио и видео кодеков и еще много чего.

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

1 Ответ

0 голосов
/ 12 ноября 2018

Это действительно зависит от библиотек, но, к сожалению, это невозможно.

Qt создает и связывает большинство сторонних библиотек статически и без экспорта каких-либо символов (см., Например, libpng ). Некоторые даже связаны только с плагинами, а не с библиотеками Qt (например, sqlite , который является только pri-файлом, импортируемым плагином). Единственный способ выяснить конкретный случай - это проверить подпапки src/3rdparty в разных репозиториях Qt.

Существует также еще один момент, на который следует обратить внимание: Qt часто пытается выполнить зависимости, используя то, что предоставляет операционная система. То есть если Qt находит libpng в хост-системе, он типично связывается с этой библиотекой, поэтому код больше даже не является частью двоичных файлов Qt, что делает связывание во время компиляции зависимым от конфигурации Qt, даже если символы экспортируются для конкретной библиотеки.

Единственное реальное исключение из всего этого - статическая ссылка на Qt. В этом случае компоновщик извлечет все эти 3-сторонние зависимости только после того, как вы свяжете конечное приложение, что даст вам возможность ссылаться на библиотеки, которые использует Qt.

...