Как избежать "ошибки LNK2005:" (уже определенные функции stdlib) при компиляции libpng с Microsoft Visual Studio '08?
(почему я пытаюсь это сделать: мне не повезло в использовании предварительно построенных двоичных файлов для libpng в Windows (несмотря на многие часы проб и ошибок), и поэтому теперь я пытаюсь скомпилировать его сам. Я нашел это полезное сообщение в блоге что касается этого, в комплекте с файлом проекта Microsoft Visual Studio 2008, но, к сожалению, до сих пор не удалось его использовать.)
он успешно компилируется при ссылке на найденный двоичный файл zlib здесь, но когда при попытке связать его с тестовым файлом я получаю следующее:
C:Documents and SettingsAdministratorMy Documents>cl "C:Documents and Settin gsAdministratorMy Documentstest.c" "C:Documents and SettingsAdministratorM y Documentslibpng.lib" -I "C:Documents and SettingsAdministratorMy Documentsinclude" 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 SettingsAdministratorMy Documentslibpng.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
может кто-нибудь пролить свет на то, как исправить эти ошибки?
1 ответов
проблема в том, что один из двух проектов, используя многопоточная DLL в то время как другой, используя многопоточная (без DLL в нем) в свойствах проекта -> свойства конфигурации -> C/C++ -> генерация кода.
случилось со мной несколько раз.
убедитесь, что "синхронизировать" этот параметр даже для сборки выпуска и для каждой возможной комбинации (debug, non debug и т. д.)