Russian Qt Forum

Qt => Вопросы новичков => Тема начата: stima от Декабрь 19, 2011, 18:23



Название: Библиотеки
Отправлено: stima от Декабрь 19, 2011, 18:23
После серфинга в инете, я немного запутался:
dll - это динамические библиотеки
lib - это статические библиотеки

есть 2 способа подгрузки:
явное ( т.е. динамическое ) - выполняеться в нужный момент ( тут вроде все просто, по типу QLibrary )
неявное ( т.е. статическое ) - выполняеться при запуске программы, а вот тут:
1. Как я понял можно в .pro файле указать LIBS += -lpath/to/lib -llib (но как задать путь к приложению)
2. #pragma comment(lib, "lib.lib")  - тут вроде тоже все понятно, но особенность этой дерективы, то что она ищет начиная с каталога где запущено приложение

прошу правок и дополнений, или хотябы ключевые слова поиска)







Название: Re: Библиотеки
Отправлено: kuzulis от Декабрь 19, 2011, 20:20
Динамическая библиотека: dll/so два способа:
1. Динамическая подгрузка из программы в любое время из любого места
2. Подгрузка при старте программы только из предопределенного места

При этом исполняемая программа внутри себя не содержит кода библиотеки, т.е. мухи отдельно от котлет

Статическая библиотека: lib/a один способ:
1. Линковка библиотеки с кодом программы в процессе сборки.

При этом исполняемая программа внутри себя содержит и код библиотеки


Название: Re: Библиотеки
Отправлено: stima от Декабрь 21, 2011, 18:05
Вроде все понятно, но ничерта не получается. Мои действия:

1. У меня есть плагин, который использует сторонюю dll
2. Есть интерфейс класса это dll в котором прописана функция __declspec(dllimport) IClass* func()
3. В .pro файле этого плагина я прописую LIBS += -l$$PWD\libname. Соответственно libname.lib лежит в каталоге проэкта.
4. Все собираеться и запускается, но когда доходит до вызова функции IClass* pClass = func() идет краш Expression: _BLOCK_TYPE_IS_VALID

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

Я пробывал добавить через проэкт библиотеку (как со статическим так и с динамическим связыванием)

п.с. В debug версии все нормально.
п.с.с. Что где должно лежать и что куда писать я уже замахался перечитывать статьи.


Название: Re: Библиотеки
Отправлено: Белый пони от Декабрь 22, 2011, 10:52
Статическая библиотека: lib/a один способ:
1. Линковка библиотеки с кодом программы в процессе сборки.

При этом исполняемая программа внутри себя содержит и код библиотеки
Т.е. если собирать статически, то программа будет работать и в ОС, где не установлен Qt ?


Название: Re: Библиотеки
Отправлено: iroln от Декабрь 22, 2011, 22:11
Можно и динамически линковать, но тогда придётся вместе с исполняемым файлом распространять "dll-ки". Для Qt - это чаще всего QtGui, QtCore