Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: проблема с линковкой lib  (Прочитано 7703 раз)
0 Пользователей и 1 Гость смотрят эту тему.
bebabo
Помогающий

ru
Offline Offline

WWW
« : 23-07-2007 09:43 » 

подскажите пожалуйста, как сделать так, чтобы одна и таже либа не подключалась дважды?
ситация возникает когда пытаюсь включить lua в проект PopCap (движок для 2d графики). обычно, когда я создаю простое консольное приложение с lua, компилятор ругается на конфликт lua.lib с некой другой библиотечкой. влючаю последнюю в игронировать, и все работает нормально. но совместно с PopCap этот номер не проходит, так как ему необходима та библиотека с которой конфликтует lua. насколько я понимаю - проблема в повторном вызове этой библиотеки. как сделать так, чтобы компилятор не пытался подключить ее второй раз, если она уже инициализированна?
« Последнее редактирование: 24-07-2007 08:01 от bebabo » Записан

bebabo
Помогающий

ru
Offline Offline

WWW
« Ответ #1 : 24-07-2007 07:59 » 

попробую четче поставить вопрос )

Каждый раз когда компилирую проект с использованием Lua, возникает следующая ошибка:
Код:
Linking...
LINK : warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library
В большинстве случаев решается просто: либо заношу данную библиотечку в игнорирование, либо делаю как рекомендует компилятор.
Подобное происходит когда я включаю Lua в проект PopCap (движок для 2d игр). При компиляции -
Код:
Linking...
LIBC.lib(crt0dat.obj) : error LNK2005: __cinit already defined in LIBCMTD.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: _exit already defined in LIBCMTD.lib(crt0dat.obj)
........... и т.д и т.п
Пытаюсь решить проблему указанным выше способом, но -
Код:
SexyAppBase.lib(SexyAppBase.obj) : error LNK2001: unresolved external symbol __beginthread
SexyAppBase.lib(MiscBuildBase.obj) : error LNK2001: unresolved external symbol __beginthread
libcpmtd.lib(xstrcoll.obj) : error LNK2001: unresolved external symbol __unlock
........... и т.д и т.п (SexyAppBase.lib - библиотечка движка PopCap).
Т.е., насколько я понимаю, проблема в том, что какая-то библиотечка вызывается вторично. отсюда - "...already defined in..."
Как это побороть?
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 24-07-2007 18:45 » 

Тут зависит, от того, как построен проект. По идее говоря во всех Heder файлах против повторного использования нужно ставить, что то типа этого:
Код:
#ifndef MYLIB_H
#define MYLIB_H
....... //тут само описание хэдэра
#endif //MYLIB_H
Не думаю, что эти две библиотеки принебрегли данным правилом. Mожет быть у тебя в коде открытые хэдэры?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
bebabo
Помогающий

ru
Offline Offline

WWW
« Ответ #3 : 26-07-2007 08:04 » 

Finch, нашел! проблема оказалась в том, что проект PopCap был настроен как многопоточный, а либа Lua была скомпилированна как синглтредовая. на след навела вот эта ошибка -
lua5.1.lib(lauxlib.obj) : error LNK2001: unresolved external symbol _errno
в общем, собрал lua5.1.lib заново. все работает! )
Записан

bebabo
Помогающий

ru
Offline Offline

WWW
« Ответ #4 : 27-07-2007 07:45 » 

хочу еще добавить, что эта проблема возникает только при использовании статической lua.lib
вчера заменил ее на динамическую - никаких ошибок линковки и всего прочего
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines