Подключение статических библиотек
От: Roman Fadeyev  
Дата: 30.05.02 05:50
Оценка:
Привет всем.


Помогите побороть следующую беду: написал свою библиотечку (.lib) c набором мелких функций, использующихбтолько RTL и STL, без всякого GUI. Теперь создаю консольный проект, подключаю библиотеку и на линковке вижу штук 70 ошибок типа "symbol already defined in module xxx.obj", в большинстве вокруг STL'евского string'a. В основном, дело касалось msvcprtd.lib и еще какой-то библиотеки, типа VClib или что-то в этом роде. Вторую я выкинул (ignore library) — все нормально, первую отключаю — ошибок еще больше — не найены _atexit, _abort..., весь IOstream и т.д. и т.п, так как в моей библиотеке я их не использовал, а стандартную отключил.

Вот так, точнее и не так и не эдак

После долгих мучений я приписал ключ FORCE:MULTIPLE, лишь бы только собрать проект. Проект собрался, но, естественно, с Warnings.

LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/FORCE' specification
msvcprtd.lib(MSVCP70D.dll) : warning LNK4006: "public: __thiscall std::basic_string,class std::allocator >::~basic_string,class std::allocator >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in crtlibd.lib(BaseUtils.obj); second definition ignored
msvcprtd.lib(MSVCP70D.dll) : warning LNK4006: "public: __thiscall std::basic_string,class std::allocator >::basic_string,class std::allocator >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) already defined in crtlibd.lib(BaseUtils.obj); second definition ignored
msvcprtd.lib(MSVCP70D.dll) : warning LNK4006: "public: __thiscall std::basic_string,class std::allocator >::basic_string,class std::allocator >(class std::basic_string,class std::allocator > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) already defined in crtlibd.lib(BaseUtils.obj); second definition ignored
msvcprtd.lib(MSVCP70D.dll) : warning LNK4006: "public: char const * __thiscall std::basic_string,class std::allocator >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) already defined in crtlibd.lib(BaseUtils.obj); second definition ignored
Debug/grmc.exe : warning LNK4088: image being generated due to /FORCE option; image may not run



Видеть каждый раз при сборке очень неприятно, тем более вот ту строчку про "image nay not run", ободряюще звучит....

Может, кто че расскажет про то как правильно работать с библиотеками? Не для конкретного случая, хотя бы в общих словах. Этот геморрой я помню еще с DOS'a, время идет а он остается

Еще есть мое сообщение про "also imported" на http://www.rsdn.ru/forum/message.asp?mid=21229
Автор: roman_fadeyev
Дата: 12.01.02
, с которым тогда так и не разобрались, может, кто сейчас поможет, задолбали меня уже эти варнинги
Re: Подключение статических библиотек
От: Хитрик Денис Россия RSDN
Дата: 30.05.02 07:19
Оценка:
Перенесено в Прочее из С++.
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[2]: Подключение статических библиотек
От: Roman Fadeyev  
Дата: 30.05.02 09:15
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

ХД>Перенесено в Прочее из С++.


Ну, тут уж мне точно никто не поможет

Ну неужели никто никогда не писал либы для своих проектов? Вешалка



PS. А чем, собственно, форум С++ не подошел? Вроде все в тему.... Прячете безответные вопросы
Re[2]: Подключение статических библиотек
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 30.05.02 10:01
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

ХД>Перенесено в Прочее из С++.


Зря ты его в "Прочее" выкинул, проблема то актуальная "как использовать STL в библиотеках".

А в "Прочем" это сообщение точно потеряется
Re: Подключение статических библиотек
От: SergH Россия  
Дата: 30.05.02 12:21
Оценка:
Здравствуйте Roman Fadeyev, Вы писали:

Вот здесь
Автор: SergH
Дата: 19.04.02
и здесь
Автор: SergH
Дата: 22.04.02
мне ответили на похожий вопрос.

Кстати, а зачем тебе либы? ИМХО, лучше или dll или open source. И основная причина моей неприязни к либам — вставшая перед тобой проблема.
Делай что должно, и будь что будет
Re: Подключение статических библиотек
От: Vorchun  
Дата: 30.05.02 12:51
Оценка:
Privetstvuju,

Izviniajus za latinicu.

Ja ispolzuju STL v lib'ah mnogo i uspeshno. Jedinstvennaja problema — pered pervoj sborkoj programmy nado ubeditsia chto vse moduli ispolzujut odnu i tu ze MSVCRT: opcii /M iz Project Settings — C/C++ — Project Options.

Nadejus, pomozet
Re[3]: Подключение статических библиотек
От: Хитрик Денис Россия RSDN
Дата: 30.05.02 16:35
Оценка:
Здравствуйте Roman Fadeyev, Вы писали:

RF>Ну, тут уж мне точно никто не поможет :(


У нас помогут везде! И если окажемся неправы, то признаем ошибку и постараемся её исправить. :shiffle:

RF>PS. А чем, собственно, форум С++ не подошел? Вроде все в тему.... Прячете безответные вопросы ;)


Нет, безответные вопросы прятать нет смысла -- так быстрее ответят, если они будут лежать у всех на виду. И лучше уж пусть ответят.

По поводу переноса. Может я перебрал в том, что перенёс топик :-\ , не серчайте. Полагаясь на ваше с DarkGray мнение, позволю себе перекинуть топик обратно и поднять его наверх этим сообщением.
Хочу также напомнить, что есть самомодерилка и с её помощью и поддержкой нескольких человек Вы (все посетители) можете исправить и моё неверное решение. :user:
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[4]: Подключение статических библиотек
От: Roman Fadeyev  
Дата: 31.05.02 03:52
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

ХД>Здравствуйте Roman Fadeyev, Вы писали:


RF>>Ну, тут уж мне точно никто не поможет


ХД>У нас помогут везде! И если окажемся неправы, то признаем ошибку и постараемся её исправить. :shiffle:


RF>>PS. А чем, собственно, форум С++ не подошел? Вроде все в тему.... Прячете безответные вопросы


ХД>Нет, безответные вопросы прятать нет смысла -- так быстрее ответят, если они будут лежать у всех на виду. И лучше уж пусть ответят.


ХД>По поводу переноса. Может я перебрал в том, что перенёс топик , не серчайте. Полагаясь на ваше с DarkGray мнение, позволю себе перекинуть топик обратно и поднять его наверх этим сообщением.

ХД>Хочу также напомнить, что есть самомодерилка и с её помощью и поддержкой нескольких человек Вы (все посетители) можете исправить и моё неверное решение.

Thanks
Re[2]: Подключение статических библиотек
От: Roman Fadeyev  
Дата: 31.05.02 04:02
Оценка:
SH>Кстати, а зачем тебе либы? ИМХО, лучше или dll или open source. И основная причина моей неприязни к либам — вставшая перед тобой проблема.

Дело в том, что подобные либы — вещь чрезвычайно легкая (в смысле, в килобайтах), делать под это дело DLL — нет смысла, будет куча мелких DLL, без всякой пользы. Ну а open source — плохо в эстетическом плане , дерево проекта напоминает свалку. Сами подумайте, если, к примеру, в это же дерево добавить MFС, здорово ли Вам будет работать? Вот и надумал я сделать маленькие либы для разных задачек — функции-утилиты, мелочи по GUI, потом, функции разбора текста и т.д. и т.п. Если какая нужна- хидер вписал, либу воткнул — и пжлста.
Re: Подключение статических библиотек
От: Whisperer  
Дата: 31.05.02 04:26
Оценка:
Здравствуйте Roman Fadeyev, Вы писали:

RF>Привет всем.



RF> Помогите побороть следующую беду: написал свою библиотечку (.lib) c набором мелких функций, использующихбтолько RTL и STL, без всякого GUI. Теперь создаю консольный проект, подключаю библиотеку и на линковке вижу штук 70 ошибок типа "symbol already defined in module xxx.obj", в большинстве вокруг STL'евского string'a. В основном, дело касалось msvcprtd.lib и еще какой-то библиотеки, типа VClib или что-то в этом роде. Вторую я выкинул (ignore library) — все нормально, первую отключаю — ошибок еще больше — не найены _atexit, _abort..., весь IOstream и т.д. и т.п, так как в моей библиотеке я их не использовал, а стандартную отключил.


RF> Вот так, точнее и не так и не эдак


RF>После долгих мучений я приписал ключ FORCE:MULTIPLE, лишь бы только собрать проект. Проект собрался, но, естественно, с Warnings.


RF>
RF>LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/FORCE' specification
RF>msvcprtd.lib(MSVCP70D.dll) : warning LNK4006: "public: __thiscall std::basic_string,class std::allocator >::~basic_string,class std::allocator >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in crtlibd.lib(BaseUtils.obj); second definition ignored
RF>msvcprtd.lib(MSVCP70D.dll) : warning LNK4006: "public: __thiscall std::basic_string,class std::allocator >::basic_string,class std::allocator >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) already defined in crtlibd.lib(BaseUtils.obj); second definition ignored
RF>msvcprtd.lib(MSVCP70D.dll) : warning LNK4006: "public: __thiscall std::basic_string,class std::allocator >::basic_string,class std::allocator >(class std::basic_string,class std::allocator > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) already defined in crtlibd.lib(BaseUtils.obj); second definition ignored
RF>msvcprtd.lib(MSVCP70D.dll) : warning LNK4006: "public: char const * __thiscall std::basic_string,class std::allocator >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) already defined in crtlibd.lib(BaseUtils.obj); second definition ignored
RF>Debug/grmc.exe : warning LNK4088: image being generated due to /FORCE option; image may not run
RF>



RF>Видеть каждый раз при сборке очень неприятно, тем более вот ту строчку про "image nay not run", ободряюще звучит....


RF>Может, кто че расскажет про то как правильно работать с библиотеками? Не для конкретного случая, хотя бы в общих словах. Этот геморрой я помню еще с DOS'a, время идет а он остается


RF>Еще есть мое сообщение про "also imported" на http://www.rsdn.ru/forum/message.asp?mid=21229
Автор: roman_fadeyev
Дата: 12.01.02
, с которым тогда так и не разобрались, может, кто сейчас поможет, задолбали меня уже эти варнинги


Я бы хотел посмотреть твой исходник самой библиотеки.
Но могу предположить что ты где то в HPP файле уже определил какуюто переменную или в реализаии класса.
В HPP файлах использую extern, а определяй в CPP (может и глупость сказал и ты это знаеш но это
очень распространенная ошибка).
Re[2]: Подключение статических библиотек
От: Roman Fadeyev  
Дата: 31.05.02 11:48
Оценка:
Здравствуйте Whisperer, Вы писали:

W>Я бы хотел посмотреть твой исходник самой библиотеки.

W>Но могу предположить что ты где то в HPP файле уже определил какуюто переменную или в реализаии класса.
W>В HPP файлах использую extern, а определяй в CPP (может и глупость сказал и ты это знаеш но это
W>очень распространенная ошибка).


Не-а, я вообще не использую никаких глобальных объектов

А вот STL что-там использует. Понять бы что....

Прикол в том, что прилинковывается msvcprtd.lib(MSVCP70D.dll) и не ладит с crtlibd.lib.


msvcprtd.lib(MSVCP70D.dll) .... __thiscall std::basic_string .... already defined in crtlibd.lib(BaseUtils.obj);


Интересно, почему???
Re[3]: Подключение статических библиотек
От: SergH Россия  
Дата: 31.05.02 11:57
Оценка:
Здравствуйте Roman Fadeyev, Вы писали:

RF> Ну а open source — плохо в эстетическом плане , дерево проекта напоминает свалку.


Если проблема только в этом, решение есть — в дереве проекта можно создавать дополнительные фолдеры.

P.S. Плз, обращайся ко мне на ты.
Делай что должно, и будь что будет
Re[4]: Подключение статических библиотек
От: Roman Fadeyev  
Дата: 03.06.02 13:34
Оценка:
Здравствуйте SergH, Вы писали:

SH>Здравствуйте Roman Fadeyev, Вы писали:


RF>> Ну а open source — плохо в эстетическом плане , дерево проекта напоминает свалку.


SH>Если проблема только в этом, решение есть — в дереве проекта можно создавать дополнительные фолдеры.


Можно было..... до версии 7.0
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.