powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
11 сообщений из 11, страница 1 из 1
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34667858
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подключил чужую либу и сборщик начал браниться:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _gmtime already defined in LIBCMTD.lib(gmtime.obj)
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _abort already defined in LIBCMTD.lib(abort.obj)
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _strncpy already defined in LIBCMTD.lib(strncpy.obj)
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _fwrite already defined in LIBCMTD.lib(fwrite.obj)
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _fflush already defined in LIBCMTD.lib(fflush.obj)
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _fread already defined in LIBCMTD.lib(fread.obj)
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _fprintf already defined in LIBCMTD.lib(fprintf.obj)
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _malloc already defined in LIBCMTD.lib(dbgheap.obj)
MSVCRT.lib(MSVCR71.dll) : error LNK2005: _free already defined in LIBCMTD.lib(dbgheap.obj)
MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMTD.lib(typinfo.obj)
MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMTD.lib(typinfo.obj)

Поменял в Runtime Library на Multi-threaded DLL (/MD) - собрался нормально.
Подскажите в чем причина была?
Как сделать, если нужно c Multi-threaded (/MT) собрать?
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34667923
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c DLL перестала работать остановка _crtBreakAlloc, поэтому нужно собрать в обычном варинате..
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34668249
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> Поменял в Runtime Library на Multi-threaded DLL (/MD) - собрался
> нормально. Подскажите в чем причина была?
Чужая либа была собрана с другим флагом линковки. в результате в Obj файлах
было несколько разных объявлений функций CRT.

> Как сделать, если нужно c Multi-threaded (/MT) собрать?
1) Пересобрать чужую либу
2) Почитать мануал на предмет этой ошибки. Если не ошибаюсь, у компоновщика
может быть флаг, позволяющий игнорировать многочисленные объявления, ну и
плюс в справке была секция по поводу линковки CRT и т. д.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34668380
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, действительно либа была собрана с др. опциями
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34670999
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня еще вопросик, когда я собираю с опцией Multi-threaded DLL (/MD), что это означает? Я понимаю, что часть кода остается в виндовских дллинах и мой exe меньше весит. Чем это хорошо и чем плохо? На всех виндах будут нужные приложению дллины?
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34671401
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> У меня еще вопросик, когда я собираю с опцией Multi-threaded DLL (/MD),
> что это означает? Я понимаю, что часть кода остается в виндовских дллинах
> и мой exe меньше весит. Чем это хорошо и чем плохо? На всех виндах будут
> нужные приложению дллины?
1) Программой MSVCP80.DLL, MSVCR80.DLL.
2) Плюс - экономия места.
3) Минус - могут быть проблемы с переносом программы на другую машины. За
подробностями читай Deploying Applications - где-то во встроенной справке
MSVC. Суть в том, что в WinXP SP 2 и выше новая схема загрузки библиотек,
она может с непривычки наудобства создавать. Если совсем кратко - если
просто скинуть *.DLL ки в C:\Windows\System32, то работать будет, только
это если все версии до WinXP SP2 или Windows Server 2003. В остальных
вариантах будет облом. Нужно будет на клиентской машине перед использование
программы запускать vc_redistx86 с той версией программы, которая
требуется.
4) DLL-лины нифига не стандартные, и по умолчанию на чистой винде (WinXP SP
2, про висту не знаю) будут отсутствовать. На клиентской винде можно
гарантировать наличие MSVCRT.DLL, но никак не MSVCP80.DLL. Плюс, если они
там и есть, то не факт, что именно той версии, которая нужна вашей
программе (с использованием манифестов на машине можт храниться несколько
версий одной длл одновременно).

Вопросы?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34671446
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет вопросов
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34675575
CyberM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня вопрос.

Как тогда отлинковать чтобы приложение наверняка заработало на машине без VC?
Так чтобы не пришлось устанавливать redist. Например что-то добавить (например необходимые DLL) в каталог с программой.

Это достаточно проблематично ещё искать версию redist. Если я например пишу на 2005 то необходим redist 2005? а не создаст ли он проблем с уже установленной версией например 2003?


Как сделать так чтобы конечному юзеру стaло понятно что ему надо установить redist? Ведь ошибка возникающая при выполнении ничё толкового не говорит.
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34675636
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberM wrote:

> Как тогда отлинковать чтобы приложение наверняка заработало на машине без
> VC?
1) Использовать Multithreaded вместо Multithreaded DLL
2) сделать даунгрейд до VC 2003.
3) сменить компилятор на mingw.
4) (очень не рекомендуется, не факт, что заработает) - отлинковать DLL и
использовать другой CRT (wincrt, например). Это выльется в неслабые танцы с
бубном.

> Так чтобы не пришлось устанавливать redist. Например что-то добавить
> (например необходимые DLL) в каталог с программой.
Почитайте статью на msvc "deploying applications" если как то хитро (не
помню, как именно), положить эти dll'ки в папку с программой вместе с
манифестом. то может заработать и без установки. Но знаю, что народ с этим
методом получал проблемы.

> Это достаточно проблематично ещё искать версию redist. Если я например
> пишу на 2005 то необходим redist 2005? а не создаст ли он проблем с уже
> установленной версией например 2003?
Нет, не создаст. VC 2003 использует другие дллки, с "нормальной" схемой
установки (MVCP71.dll и т.д.), а другие версии VC2005 друг друга затирать
не будут, так как новая схема позволяет хранить dll'ки разных версий
одновременно.

> Как сделать так чтобы конечному юзеру стaло понятно что ему надо
> установить redist? Ведь ошибка возникающая при выполнении ничё толкового
> не говорит.
1)В VC можно собрать инсталлятор, который установит эти пакеты вместе с
программой. Инструкции где-то внутри справки.
2) это накатать объемистое README, которое все равно никто читать не будет.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34675656
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV
3) сменить компилятор на mingw.

Это чем поможет?
...
Рейтинг: 0 / 0
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
    #34675695
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> Это чем поможет?
скомпилированные мингв приложения не требует MSVCP80.DLL (насколько помню,
он msvcrt использует).Соответственно, не нужен будет vcredist_x86.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]