(Почему я пытаюсь сделать это: у Меня не было удачи в использовании предварительно созданных двоичных файлов для libpng в Windows (несмотря на многие часы метода проб и ошибок), и поэтому теперь пытаюсь скомпилировать его самого. Я нашел это полезное сообщение в блоге относительно этого, вместе с Microsoft Visual Studio файл проекта 2008 года, но к сожалению все еще не смог использовать его.)
Это успешно компилирует при соединении с zlib двоичным файлом, найденным здесь, но при попытке связать его с тестовым файлом я получаю следующее:
C:\Documents and Settings\Administrator\My Documents>cl "C:\Documents and Settin gs\Administrator\My Documents\test.c" "C:\Documents and Settings\Administrator\M y Documents\libpng.lib" -I "C:\Documents and Settings\Administrator\My Documents\include" Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. test.c Microsoft (R) Incremental Linker Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. /out:test.exe test.obj "C:\Documents and Settings\Administrator\My Documents\libpng.lib" MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _abort already defined in LIBCMT.lib( abort.obj) MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _fread already defined in LIBCMT.lib( fread.obj) MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _malloc already defined in LIBCMT.lib (malloc.obj) MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _free already defined in LIBCMT.lib(f ree.obj) MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: ___iob_func already defined in LIBCMT .lib(_file.obj) LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; u se /NODEFAULTLIB:library test.exe : fatal error LNK1169: one or more multiply defined symbols found
Кто-либо мог хотеть пролить некоторый свет относительно того, как зафиксировать эти ошибки?
Проблема в том, что один из в двух проектах используется Многопоточная DLL , в то время как в другом используется Многопоточная (без DLL) в свойствах проекта -> Свойства конфигурации -> C / C ++ -> Код поколение.
Такое случалось со мной несколько раз.
Не забудьте "синхронизировать" этот параметр даже для сборок выпуска и для каждой возможной комбинации (отладка, без отладки и т. д.)