| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Как подключить к проекту dll библиотеку? |
| Автор: Elfet 19.9.2009, 14:38 |
| Всем привет! Подскажите пожалуйста как подключить к проекту на Qt библиотеку dll? Заранее спасибо! |
| Автор: Acer 19.9.2009, 20:51 | ||
| Например так: в *.pro файле пишем
Добавлено через 1 минуту и 28 секунд А если пишешь в MSVS, то там в свойствах проекта указываешь *.lib файл библиотеки, которую нужно линковать |
| Автор: ecspertiza 19.9.2009, 23:04 | ||
| Если честно не совсем понятно что значит подключить dll библиотеку, есть такой замечательный класс для вызова функций из длл QLibrary вот пример из ассистента
|
| Автор: Elfet 19.9.2009, 23:56 | ||||
| ecspertiza, я создал проект в QCreator который у них называется "Библиотека С++". Так как вот теперь мне воспользоваться этой библиотекой? Добавлено через 9 минут и 31 секунду В проекте "библиотека С++" объявляются какие-то глобальные штуки:
Как с этим работать? |
| Автор: ecspertiza 21.9.2009, 08:19 |
| Я так понимаю, что ты хочешь работать с классом SmartFlowLib ? то можно почитать тут http://www.prog.org.ru/topic_8259_0.html |
| Автор: bsa 21.9.2009, 11:53 |
| Elfet, ты в начале темы спрашивал, как подключить DLL к проекту. Ответа два: 1. Если нужна жесткая привязка к DLL (т.е. без нее нельзя запускать), то http://forum.vingrad.ru/index.php?showtopic=273411&view=findpost&p=1971637 дал Acer 2. Если нужна опциональная возможность загрузки (типа плагина), то http://forum.vingrad.ru/index.php?showtopic=273411&view=findpost&p=1971728 дал ecspertiza. 3. Если тебе нужно написать плагин, то в документации Qt есть http://qt.nokia.com/doc/4.5/plugins-howto.html по этому поводу. |
| Автор: Elfet 21.9.2009, 13:37 |
| bsa, мне нужна жёсткая привязка. Я написал LIBS += ... однако не могу понять как воспользоваться теперь моим классом (SmartFlowLob) ecspertiza, ооо! спасибо то что нужно! |
| Автор: ecspertiza 21.9.2009, 14:15 |
| А в LIBS не забыл длл-ку подключить? |
| Автор: Elfet 21.9.2009, 14:54 |
| ecspertiza, всё вроде заработало, спасибо |
| Автор: Elfet 22.9.2009, 08:57 | ||||
А так и должно быть, что подключая к проекту библиотеку:
Я должен подключать так же теже библиотеки которые используются в ней:
Получается я в самой библиотеке (SmartFlowLib) подключаю libboost_serialization-mgw34-s-1_40.lib, и в самом приложении, которое подключает SmartFlowLib подключаю libboost_serialization-mgw34-s-1_40.lib. Так и должно быть? |
| Автор: ecspertiza 22.9.2009, 09:04 |
| Я так думаю что скорее всего да, так и должно быть я просто из одной либы другу не подключал, но если проект для сборки этого требует, то скорее всего так и должно быть |
| Автор: Elfet 22.9.2009, 12:38 |
| korbian, видимо я статическую библиотеку сделал? Нужно её динамической сделать? |
| Автор: korbian 22.9.2009, 13:15 |
все зависит от дизайна твоего продукта. если предполагается ее использование более чем в одном программном модуле в пределах системы, то логично сделать библиотеку динамически подключаемой. |
| Автор: Elfet 22.9.2009, 13:33 |
| korbian, да, я для библиотеки хочу сделать два интерфейса - графический и из командной строки. Как сделать такую библиотеку? |
| Автор: korbian 22.9.2009, 13:43 |
Elfet, как я понял ты используешь QCreator.! Там такую библиотеку можно сделать так:
Добавлено через 2 минуты и 39 секунд или заменить CONFIG += staticlib на CONFIG += shared. но я, честно говоря, так не пробовал. |
| Автор: Elfet 22.9.2009, 16:05 | ||
korbian, да, это у меня в проекте с самого начала было:
|
| Автор: korbian 23.9.2009, 08:16 |
| Elfet, ну значит все нормально, библиотека динамическая! не понятно только зачем ты подключаешь повторно статические(!!!) библиотеки, используемые в dll! покажи билд-лог без дублирования! |
| Автор: Elfet 23.9.2009, 16:53 | ||||||||||
Если убираю вот это:
То компилятор выдаёт:
Может я неправильно сделал саму библиотеку? Вот она такая: SmartFlowLib.h
main.h
Element.h
Ну и так далее... |
| Автор: korbian 24.9.2009, 08:08 | ||
Elfet, нужно убрать только вот эту строчку в настройках проекта, использующего вашу dll:
а INCLUDEPATH не трогай.( если, конечно, в *.h файлах библиотеки нет вызовов функций\методов из boost::serialization. В таком случае дизайн вашей библиотеки неправильный и нужно будет перенести вызовы в *.c\*.cpp файлы, чтобы избавить клиентский код библиотеки от не нужных зависимостей) |
| Автор: Elfet 24.9.2009, 09:59 | ||||
korbian, да, видимо неправильный дизайн библиотеки. А как можно перенести в cpp файлы вот эту строчку:
И видимо плохо то что у меня в заголовочном файле есть вот это:
|
| Автор: korbian 24.9.2009, 10:54 |
| Elfet, а что мешает перенести в cpp? нет этот код придется оставить, для этого достаточно подключить в header <boost/serialization/access.hpp> |
| Автор: Elfet 24.9.2009, 11:35 | ||
Просто много где использую boost и не хочется каждый раз всё писать, поэтому я сделал один файл (main.h) в котором и делаю все подключения.
Ну вот как только подключу в хедере это сразу библиотека станет зависимой? |
| Автор: korbian 24.9.2009, 14:49 |
| Elfet, думаю, что не станет. <boost/serialization/access.hpp>, вроде, хидер-онли. |
| Автор: uiaaaia 14.4.2011, 16:32 |
| Я написал в .pro файле LIBS += C:/Qt/2010.05/qt/Interface/libifaces.dll \ C:/Qt/2010.05/qt/Interface/libparams.dll В результате нажимаю выполнить, и у меня сразу выдает ошибку а в консоли приложения пишет Запускается C:\Qt\2010.05\qt\Interface-build-desktop\debug\Interface.exe... C:\Qt\2010.05\qt\Interface-build-desktop\debug\Interface.exe завершился с кодом -1073741511 Пробовал добавлять строчку INCLUDEPATH += C:/Qt/2010.05/qt/Interface Все равно запускает программу, но тут же выдает ошибку Помогите пожалуйста исправить это |