MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Опции статической и динамической линковки в Qt (переменная LIBS)
22.12.2017
18:10
Текстовые метки: qt, LIBS, линковка, динамическая, статическая, опции, проект, файл проекта
Раздел: Компьютер - Программирование - Язык C++ - Библиотека Qt - Инсталляция Qt и сборка проектов

В *.pro файле можно указывать переменную LIBS, которая будет задавать линкеру какие библиотеки нужно подлинковывать.


Официальная документация не богата на подробности:



LIBS

Specifies a list of libraries to be linked into the project. If you use the Unix -l (library) and -L (library path) flags, qmake handles the libraries correctly on Windows (that is, passes the full path of the library to the linker). The library must exist for qmake to find the directory where a -l lib is located.

For example:

unix:LIBS += -L/usr/local/lib -lmath

win32:LIBS += c:/mylibs/math.lib

To specify a path containing spaces, quote the path using the technique described in Whitespace.

win32:LIBS += "C:/mylibs/extra libs/extra.lib"

unix:LIBS += "-L/home/user/extra libs" -lextra

By default, the list of libraries stored in LIBS is reduced to a list of unique names before it is used. To change this behavior, add the no_lflags_merge option to the CONFIG variable:

CONFIG += no_lflags_merge


Кратко, пользоваться опцией LIBS можно следующим образом.


Для динамической линковки с какой-нибудь библиотекой libastral.so (в Linux) или libastral.dll (в Windows под MinGW) можно писать так:


LIBS += -L./путь_до_либы/ -lastral


То есть, в опции -L задается путь до каталога, в котором лежит файл библиотеки libastral.so/libastral.lib. А в опции -l задается имя библиотеки. Но это имя нужно писать без префикса "lib", и без расширния, так сложилось исторически.


Замечание для Windows: чтобы линковалась работа с libastral.dll, необходим файл libastral.lib. Этот файл может быть двух типов - "легкий", когда в нем содержатся только заголовки функций, и тогда он используется при динамической линковке. И "тяжелый", когда в нем содержатся и заголовки и реализация, и он используется при статической линковке (см. далее).


Для статической линковки с какой-нибудь библиотекой libastral.a (Linux) или libastral.lib (Windows) используется следующий синтаксис:


LIBS += /путь_до_либы/libastral.a


То есть, без всяких опций просто пишется файл статической библиотеки (а мы помним, что статическая библиотека - это просто архив с *.so файлами).


Надо отметить, что такой механизм справедлив для GCC и для MinGW. Для VSC++ компилятора линковка настраивается немного по-другому (надо выяснить как).



Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования