![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Доброго времени суток!
Есть задача написать dll в которой были бы реализованы некоторые методы обработки изображений. За основу взял библиотеку GraphicsMagick. Собрал ее как Static Multi Thread. Соответственно к моему проекту подключены *.lib библиотеки. При попытке сборки, линкер выдает ряд ошибок: error LNK2005: *** already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib. Долго разбирался с настройками проекта, но так ничего и не вышло. На сколько я понимаю возникает конфликт между разными версиями CRT библиотек. Т.е. библиотеки GraphicsMagick используют LIBCMT, а моя библиотека - MSVCRTD... Выходит нельзя собрать DLL которая использует статические библиотеки? Если собрать GraphicsMagick как DLL, то все полученные *.dll файлы придется тащить вместе с моей библиотекой? Пожалуйста помогите разобраться... P.S. и еще... У меня нет опыта в создании DLL. Буду признателен, если подскажите какую-нибудь литературу... |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Угу придется -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Superklug, может название одной из функций совпадет с именем функции из CRT?
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Superklug |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Нет... В ошибках фигурируют функции _exit, __malloc_dbg и т.п. Не знаю правильно ли я сделал, но в настройках проекта указал игнорирование LIBCMTD.lib. Вроде теперь конфликта между MSVCRTD и LIBCMTD не возникает. Однако есть еще ряд ошибок линкера, причину возникновения которых я не знаю(
Наверно проблема связана с шаблонными классами и функциями. Т.е. несколько раз генерируется одинаковый код для шаблонов с одинаковыми параметрами... Как этого избежать? |
||||
|
|||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Superklug, я чет туплю. У тебя либа статическая совсем (только lib без dll)? Или динамическая, но подключается статически через lib файл (секцию экспорта).
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
||||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Superklug, статические либы ни что иное как собранные obj файлы, так что CRT у lib и у проекта который подключает ее должен совпадать. Может разве что отличаться debug/Release CRT
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Alexeis, а как же вот это: ссылка?
На сколько я понял для dll и lib разные библиотеки... Ну я надеюсь эта проблема решилась игнорированием одной из конфликтующих библиотек. А что на счет этого:
Это сообщение отредактировал(а) Superklug - 8.6.2010, 12:14 |
|||
|
||||
Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
А обязательно при создании DLL указывать Runtime Library как Multi-threaded Debug DLL (/MDd)? Что будет если выбрать Multi-threaded Debug (/MTd)?
Возможно я с самого начала неправильно использую библиотеки GraphicsMagick? Как нужно собрать эти библиотеки, чтобы на их основе сделать свою динамическую библиотеку? Нужно получить именно 1 файл *.dll. Это сообщение отредактировал(а) Superklug - 8.6.2010, 13:25 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Запросто. Я у себя всегда использую только MTd. Размер немного раздувается, но зато ничего не нужно за собой тащить. Важно, чтобы статическая либа, которая подключается к DLL нашла все необходимые символы. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Alexeis, а что на счет этих ошибок?
Это сообщение отредактировал(а) Superklug - 9.6.2010, 07:53 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Superklug, уточните все таки, указанные ошибки получаются когда lib файл и dll компилируются с одинаковым RTL или все так с разными? Компилятор тот же самый? Может отличаются некоторые другие опции проекта. Или скажем заголовочные файлы менялись после того как компилировалась либа.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
Superklug, может, extern templates поможет
Это сообщение отредактировал(а) Alek86 - 9.6.2010, 22:20 |
|||
|
||||
Superklug |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Ошибки были как с разными версиями RTL так и с одинаковыми (/MTd)...
Настройки проектов одинаковые, компилятор один и тот же. Удалось решить проблему выставив в качестве RTL - Multi-threaded Debug DLL для библиотек GM и для моей библиотеки. Пока не могу оценить правильность работы. Но библиотека хотя бы собирается... Осталось только пара предупреждений. Пока не могу понять причину их возникновения, но думаю разберусь. Всем спасибо за помощь! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |