Для чего используется «длинный» тип данных?

Если вы хотите развернуть свое приложение на компьютерах клиентов, а не использовать свое приложение только самостоятельно, мы обнаружим, что метод LIBS+= -Lxxx -lyyy может привести к путанице, если не проблемы.

Мы разрабатываем приложения для Linux, Mac и Windows с использованием Qt. Мы поставляем полные автономные приложения. Поэтому все несистемные библиотеки должны быть включены в пакет развертывания. Мы хотим, чтобы наши клиенты могли запускать приложение с одного USB-накопителя для всех ОС. По соображениям совместимости с платформой USB-флешка должна быть отформатирована как FAT32, которая не поддерживает символические ссылки (Linux).

Мы обнаружили, что LIBS+= -Lxxx -lyyy идиома слишком много черного ящика:

  1. Мы точно не знаем, что такое путь к файлу (статической или динамической), который был найден компоновщиком. Это неудобно. Наш Mac-линкер регулярно обнаруживал библиотеки, отличные от тех, которые, как мы думали, должны использоваться. Это произошло несколько раз с библиотеками OpenSSL, где компоновщик Mac нашел и использовал свою собственную - более старую, несовместимую версию OpenSSL, а не нашу запрошенную версию.
  2. Мы не можем позволить себе, чтобы компоновщик использовал символические ссылки в библиотеках, поскольку это сломало бы пакет развертывания.
  3. Мы хотим видеть из имени библиотеки ссылку на статическую или динамическую библиотеку.

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

Сначала мы узнаем, какую операционную систему мы используем, и поместим ее в переменную CONFIG. И, например, для Linux 64bit, тогда:

linux64 {
    LIBSSL= $$OPENSSLPATH/linux64/lib/libssl.a
    !exists($$LIBSSL): error ("Not existing $$LIBSSL")
    LIBS+= $$LIBSSL
    LIBCRYPTO= $$OPENSSLPATH/linux64/lib/libcrypto.a
    !exists($$LIBCRYPTO): error ("Not existing $$LIBCRYPTO")
    LIBS+= $$LIBCRYPTO
}

Все зависимости могут быть скопированы в пакет развертывания, поскольку мы знаем их пути к файлам.

13
задан Community 23 May 2017 в 12:34
поделиться