Russian Qt Forum
Ноябрь 24, 2024, 03:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Библиотеки  (Прочитано 2787 раз)
stima
Гость
« : Декабрь 19, 2011, 18:23 »

После серфинга в инете, я немного запутался:
dll - это динамические библиотеки
lib - это статические библиотеки

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

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





Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Декабрь 19, 2011, 20:20 »

Динамическая библиотека: dll/so два способа:
1. Динамическая подгрузка из программы в любое время из любого места
2. Подгрузка при старте программы только из предопределенного места

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

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

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

ArchLinux x86_64 / Win10 64 bit
stima
Гость
« Ответ #2 : Декабрь 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 версии все нормально.
п.с.с. Что где должно лежать и что куда писать я уже замахался перечитывать статьи.
Записан
Белый пони
Гость
« Ответ #3 : Декабрь 22, 2011, 10:52 »

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

При этом исполняемая программа внутри себя содержит и код библиотеки
Т.е. если собирать статически, то программа будет работать и в ОС, где не установлен Qt ?
Записан
iroln
Гость
« Ответ #4 : Декабрь 22, 2011, 22:11 »

Можно и динамически линковать, но тогда придётся вместе с исполняемым файлом распространять "dll-ки". Для Qt - это чаще всего QtGui, QtCore
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.088 секунд. Запросов: 23.