Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Как подключить к проекту dll библиотеку? 
:(
    Опции темы
korbian
Дата 22.9.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



Elfet, как я понял ты используешь QCreator.! Там такую библиотеку можно сделать так:
  • File->New->Projects: C++ Library
  • в запустившемся визарде тип библиотеки нужно установить в Shared library
Для существующего проекта в его pro-файле нужно закомментировать строчку CONFIG += staticlib и убедиться, что TEMPLATE = lib

Добавлено через 2 минуты и 39 секунд
или заменить CONFIG += staticlib на CONFIG += shared. но я, честно говоря, так не пробовал.


--------------------
korbian ©
PM   Вверх
Elfet
Дата 22.9.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



korbian, да, это у меня в проекте с самого начала было:
Цитата
TEMPLATE = lib
CONFIG += shared



--------------------
PM MAIL WWW Skype   Вверх
korbian
Дата 23.9.2009, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



Elfet, ну значит все нормально, библиотека динамическая! не понятно только зачем ты подключаешь повторно статические(!!!) библиотеки, используемые в  dll! покажи билд-лог без дублирования! 


--------------------
korbian ©
PM   Вверх
Elfet
  Дата 23.9.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Если убираю вот это:
Цитата
INCLUDEPATH += D:/boost/boost_1_40_0
LIBS += D:/boost/boost_1_40_0/stage/lib/libboost_serialization-mgw34-s-1_40.lib

То компилятор выдаёт:
Цитата

In file included from ../../Projects/SmartFlowLib/smartflowlib.h:5,
from mainwindow.h:9,
from main.cpp:2:
../../Projects/SmartFlowLib/main.h:15:42: boost/archive/xml_oarchive.hpp: No such file or directory
../../Projects/SmartFlowLib/main.h:16:42: boost/archive/xml_iarchive.hpp: No such file or directory
../../Projects/SmartFlowLib/main.h:18:39: boost/serialization/nvp.hpp: No such file or directory
../../Projects/SmartFlowLib/main.h:19:43: boost/serialization/utility.hpp: No such file or directory
../../Projects/SmartFlowLib/main.h:20:40: boost/serialization/list.hpp: No such file or directory
../../Projects/SmartFlowLib/main.h:21:39: boost/serialization/map.hpp: No such file or directory
../../Projects/SmartFlowLib/main.h:22:42: boost/serialization/vector.hpp: No such file or directory
../../Projects/SmartFlowLib/main.h:23:42: boost/serialization/string.hpp: No such file or directory
../../Projects/SmartFlowLib/main.h:24:43: boost/serialization/version.hpp: No such file or directory
In file included from ../../Projects/SmartFlowLib/main.h:30,
from ../../Projects/SmartFlowLib/smartflowlib.h:5,
from mainwindow.h:9,
from main.cpp:2:
../../Projects/SmartFlowLib/Source/Node.h:15: error: `boost' has not been declared
../../Projects/SmartFlowLib/Source/Node.h: In member function `void Node::serialize(Archive&, unsigned int)':
../../Projects/SmartFlowLib/Source/Node.h:19: error: there are no arguments to `BOOST_SERIALIZATION_NVP' that depend on a template parameter, so a declaration of `BOOST_SERIALIZATION_NVP' must be available
../../Projects/SmartFlowLib/Source/Node.h:19: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
../../Projects/SmartFlowLib/Source/Node.h:20: error: there are no arguments to `BOOST_SERIALIZATION_NVP' that depend on a template parameter, so a declaration of `BOOST_SERIALIZATION_NVP' must be available
../../Projects/SmartFlowLib/Source/Node.h:21: error: there are no arguments to `BOOST_SERIALIZATION_NVP' that depend on a template parameter, so a declaration of `BOOST_SERIALIZATION_NVP' must be available
../../Projects/SmartFlowLib/Source/Node.h: At global scope:
../../Projects/SmartFlowLib/Source/Node.h:26: error: expected identifier before numeric constant
../../Projects/SmartFlowLib/Source/Node.h:26: error: expected `,' or `...' before numeric constant
../../Projects/SmartFlowLib/Source/Node.h:26: error: expected constructor, destructor, or type conversion before ';' token
In file included from ../../Projects/SmartFlowLib/main.h:33,
from ../../Projects/SmartFlowLib/smartflowlib.h:5,
from mainwindow.h:9,
from main.cpp:2:
../../Projects/SmartFlowLib/Source/Mesh.h:25: error: `boost' has not been declared
../../Projects/SmartFlowLib/Source/Mesh.h: In member function `void Mesh::serialize(Archive&, unsigned int)':
../../Projects/SmartFlowLib/Source/Mesh.h:29: error: there are no arguments to `BOOST_SERIALIZATION_NVP' that depend on a template parameter, so a declaration of `BOOST_SERIALIZATION_NVP' must be available
../../Projects/SmartFlowLib/Source/Mesh.h: At global scope:
../../Projects/SmartFlowLib/Source/Mesh.h:34: error: expected identifier before numeric constant
../../Projects/SmartFlowLib/Source/Mesh.h:34: error: expected `,' or `...' before numeric constant
../../Projects/SmartFlowLib/Source/Mesh.h:34: error: expected constructor, destructor, or type conversion before ';' token
mingw32-make[1]: Leaving directory `D:/Qt/Projects/SmartFlow'
mingw32-make: Leaving directory `D:/Qt/Projects/SmartFlow'
mingw32-make[1]: *** [release/main.o] Error 1
mingw32-make: *** [release] Error 2
Завершено с кодом возврата 2.



Может я неправильно сделал саму библиотеку?

Вот она такая:
SmartFlowLib.h
Код

#ifndef SMARTFLOWLIB_H
#define SMARTFLOWLIB_H

#include "SmartFlowLib_global.h"
#include "main.h"

class SHARED_EXPORT SmartFlowLib {
public:
    ...
private:
    Solver *solver;
};

#endif // SMARTFLOWLIB_H



main.h
Код

#ifndef MAIN_H
#define MAIN_H

#include <vector>
#include <list>
#include <map>
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <math.h>
using namespace std;


#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>

#include <boost/serialization/nvp.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/map.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/version.hpp>



#include "Source/MyError.h"

#include "Source/Node.h"
#include "Source/Edge.h"
#include "Source/Element.h"
#include "Source/Mesh.h"
#include "Source/Imports/ImportMesh.h"
#include "Source/Imports/ImportFluent2D.h"
#include "Source/Solver.h"

#endif // MAIN_H



Element.h
Код

#include "../main.h"
#ifndef ELEMENT_H
#define ELEMENT_H

class Element
{
public:
    Element(void);
    ...
public:
    vector<Node*> *nodes;
    ...
};

#endif


Ну и так далее...


--------------------
PM MAIL WWW Skype   Вверх
korbian
Дата 24.9.2009, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



Elfet, нужно убрать только вот эту строчку в настройках проекта, использующего вашу dll:
Цитата

LIBS += D:/boost/boost_1_40_0/stage/lib/libboost_serialization-mgw34-s-1_40.lib

а INCLUDEPATH не трогай.( если, конечно, в *.h файлах библиотеки нет вызовов функций\методов из boost::serialization. В таком случае дизайн вашей библиотеки неправильный и нужно будет перенести вызовы в *.c\*.cpp файлы, чтобы избавить клиентский код библиотеки от не нужных зависимостей)


--------------------
korbian ©
PM   Вверх
Elfet
Дата 24.9.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



korbian, да, видимо неправильный дизайн библиотеки.  А как можно перенести в cpp файлы вот эту строчку: 
Код

friend class boost::serialization::access;

И видимо плохо то что у меня в заголовочном файле есть вот это:
Код

#include <boost/archive/xml_oarchive.hpp>



--------------------
PM MAIL WWW Skype   Вверх
korbian
Дата 24.9.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



Elfet
Цитата(Elfet @  24.9.2009,  10:59 Найти цитируемый пост)
#include <boost/archive/xml_oarchive.hpp>

а что мешает перенести в cpp?
Цитата(Elfet @  24.9.2009,  10:59 Найти цитируемый пост)
friend class boost::serialization::access;

нет этот код придется оставить, для этого достаточно подключить в header <boost/serialization/access.hpp>



--------------------
korbian ©
PM   Вверх
Elfet
Дата 24.9.2009, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Цитата(korbian @  24.9.2009,  11:54 Найти цитируемый пост)
а что мешает перенести в cpp?

Просто много где использую boost и не хочется каждый раз всё писать, поэтому я сделал один файл (main.h) в котором и делаю все подключения.

Цитата(korbian @  24.9.2009,  11:54 Найти цитируемый пост)
нет этот код придется оставить, для этого достаточно подключить в header <boost/serialization/access.hpp>

Ну вот как только подключу в хедере это сразу библиотека станет зависимой?



--------------------
PM MAIL WWW Skype   Вверх
korbian
Дата 24.9.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



Elfet, думаю, что не станет. <boost/serialization/access.hpp>, вроде, хидер-онли.


--------------------
korbian ©
PM   Вверх
uiaaaia
Дата 14.4.2011, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.4.2011

Репутация: нет
Всего: нет



Я написал в .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

Все равно запускает программу, но тут же выдает ошибку

Помогите пожалуйста исправить это
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0920 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.