Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Code Blocks dll, Динамическая библиотека в Code Blocks'e 
:(
    Опции темы
Petr1993
Дата 2.5.2013, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я создал в Code Blocks'e динамическую библиотеку.
У меня есть файлы *.dll, *.h, *.def.
Что я должен сделать чтобы подключить эту библиотеку статически к какому-нибудь проекту?
PM MAIL   Вверх
bsa
Дата 3.5.2013, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Petr1993, ничего. Динамическую библиотеку можно подключать только динамически. Для этого достаточно добавить dll в проект (я так понимаю, компилятор у тебя mingw).
PM   Вверх
Petr1993
Дата 3.5.2013, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, компилятор mingw.
Но разве нельзя подключить библиотеку с неявной компоновкой?
PM MAIL   Вверх
NoviceF
Дата 3.5.2013, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(Petr1993 @  3.5.2013,  12:20 Найти цитируемый пост)
Но разве нельзя подключить библиотеку с неявной компоновкой? 


если ты о статической компоновке, то:

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

При этом код библиотеки будет скомпонован вместе с твоим кодом в один бинарник. 
То есть в случае динамической линковки библиотека хранится в виде отдельного файла (so/dll), в случае статической - она включается в состав самого исполняемого файла.

Это сообщение отредактировал(а) NoviceF - 3.5.2013, 12:19
PM MAIL   Вверх
Petr1993
Дата 3.5.2013, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А что тогда означает явное и неявное подключение динамической библиотеки?
PM MAIL   Вверх
NoviceF
Дата 3.5.2013, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(Petr1993 @  3.5.2013,  13:26 Найти цитируемый пост)
А что тогда означает явное и неявное подключение динамической библиотеки? 

А там, откуда ты взял этот термин, не написано? smile

Мне не приходилось пользоваться.

Это сообщение отредактировал(а) NoviceF - 3.5.2013, 12:34
PM MAIL   Вверх
Petr1993
Дата 3.5.2013, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Там написано что они отличаються методами доступа к функциям динамической библиотеки.

PM MAIL   Вверх
NoviceF
Дата 3.5.2013, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(Petr1993 @  3.5.2013,  13:56 Найти цитируемый пост)
Там написано что они отличаються методами доступа к функциям динамической библиотеки.


Чуток нагуглил на тему. По мотивам http://citforum.ru/book/cook/dll0.shtml и другой найденной инфы:

"Существует два способа загрузки DLL: с явной и неявной компоновкой. "

При загрузке с неявной компоновкой, библиотека загружается до начала выполнения исполняемого файла.
При явной компоновке, библиотека подгружается уже во время выполнения программы.

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

В общем по началу намного понятнее, проще и универсальнее использовать только первый способ, это то, что описал выше bsa.
PM MAIL   Вверх
Petr1993
Дата 4.5.2013, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо.
PM MAIL   Вверх
bsa
Дата 7.5.2013, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Загрузить библиотеку во время выполнения под Windows можно так:
Код
typedef void (*MyFunc)(void);
...
HMODULE dll = LoadLibrary("my.dll");
if (dll == NULL) {
   //ошибка загрузки, подробнее GetLastError()
   ...
}
MyFunc myFunc = GetProcAddress(dll, "myFunc");
...
myFunc();
...
FreeLibrary(dll);


При этом в библиотеке должна быть функция:
Код
extern "C" //в С++ имена функций отличаются от указанных в коде
__declspec("dllexport") //необходимо, чтобы функция была доступна для использования вне библиотеки
void myFunc(void)
{
...
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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