|
|
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
Подключил чужую либу и сборщик начал браниться: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Поменял в Runtime Library на Multi-threaded DLL (/MD) - собрался нормально. Подскажите в чем причина была? Как сделать, если нужно c Multi-threaded (/MT) собрать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 16:29 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
c DLL перестала работать остановка _crtBreakAlloc, поэтому нужно собрать в обычном варинате.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 16:45 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
Tubrik wrote: > Поменял в Runtime Library на Multi-threaded DLL (/MD) - собрался > нормально. Подскажите в чем причина была? Чужая либа была собрана с другим флагом линковки. в результате в Obj файлах было несколько разных объявлений функций CRT. > Как сделать, если нужно c Multi-threaded (/MT) собрать? 1) Пересобрать чужую либу 2) Почитать мануал на предмет этой ошибки. Если не ошибаюсь, у компоновщика может быть флаг, позволяющий игнорировать многочисленные объявления, ну и плюс в справке была секция по поводу линковки CRT и т. д. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 18:10 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
спасибо, действительно либа была собрана с др. опциями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 18:54 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
У меня еще вопросик, когда я собираю с опцией Multi-threaded DLL (/MD), что это означает? Я понимаю, что часть кода остается в виндовских дллинах и мой exe меньше весит. Чем это хорошо и чем плохо? На всех виндах будут нужные приложению дллины? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 16:45 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 18:29 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
нет вопросов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 18:50 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
У меня вопрос. Как тогда отлинковать чтобы приложение наверняка заработало на машине без VC? Так чтобы не пришлось устанавливать redist. Например что-то добавить (например необходимые DLL) в каталог с программой. Это достаточно проблематично ещё искать версию redist. Если я например пишу на 2005 то необходим redist 2005? а не создаст ли он проблем с уже установленной версией например 2003? Как сделать так чтобы конечному юзеру стaло понятно что ему надо установить redist? Ведь ошибка возникающая при выполнении ничё толкового не говорит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 14:51 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 16:17 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
ErV 3) сменить компилятор на mingw. Это чем поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 16:45 |
|
||
|
error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
|
|||
|---|---|---|---|
|
#18+
Tubrik wrote: > Это чем поможет? скомпилированные мингв приложения не требует MSVCP80.DLL (насколько помню, он msvcrt использует).Соответственно, не нужен будет vcredist_x86. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 17:26 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=285&tid=2028495]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 347ms |

| 0 / 0 |
