Форум для программистов - задавайте интересные вопросы - получайте квалифицированные ответы
Глюк в Visual C++. Как обойти?
  • t0xygent0xygen June 2011
    Всем привет,

    У меня Visual Studio 2003.NET (версия 7.1.3088). Есть проект который я создал в этой же среде (MFC App). Проблема в том, что после присоединения необходимых мне моих исходников он иногда (не всегда) перестает работать. Проявляется это оригинально, т.е. то он работает, то на следующий день я его открываю и он перестает работать (с тем же самым кодом !!! Ничего не менялось что странно !!!). Когда я говорю что не работает это значит что выдается ошибка линковщика:

    CubeReality error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in libcpmtd.lib(newop.obj)

    CubeReality error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmtd.lib(newaop.obj)

    CubeReality error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)

    CubeReality error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) already defined in LIBCMTD.lib(delete2.obj)

    В чем проблема? То что это не мой глюк это точно. Поскольку между его заскоками с работой-неработой я свой код вообще не менял !!!.

    Для пофиксенья данной ошибки мне приходится пересоздавать проект и копировать код целиком из старого проекта в новый. И тогда все опять работает но не надолго. В общем не совсем удобно :(.

    Заранее спасибо за любую помощь в обходе данной ошибки.
  • deft0ndeft0n June 2011
    Скорее всего в проге присутствует какая то некорректная работа с памятью, хэндл там не закрыл, или трэд.
    В таких случаях помогает перегрузить машину и удалить временные фалы.
  • reg1strreg1str June 2011
    Не бывает такого :)

    Ошибка LNK2005 говорит о том, что указанный символ (переменная или функция) определен более одного раза (подробнее посмотри соответствующие статьи в MSDN). Проверь список подключаемых библиотек, проверь свои подключаемые исходники и пр. Если ничего не менялось в проекте, то значит что-то менялось вне его, от чего твой проект зависит... Судя по тому, что ругань на операторы new и delete, возможно проблема в том, что ты пытаешься слинковаться с дебажной и с релизными версиями каких-то либок.

    Проверь для конфигруаций Release и Debug настройки в пунктах
    с/с++\Code Generation\Runtime library
    Linker\Input\Additional Dependencies
  • WiperWiper June 2011
    Поищите описание ошбки - там есть рецепт лечения.
    В кратце - надо посмотреть подробный лог. Исключить из дефолтных эти библиотеки и добавить их как дополнительные. При этом возможно придётся поэкспериментировать с порядком следования. Если я не ошибаюсь, то порядок обратен тому, который описан в ошибке.
    Вот кусок *.vcproj

    Name="VCLinkerTool"
    AdditionalDependencies="odbc32.lib nafxcwd.lib libcpmtd.lib"
    OutputFile="$(OutDir)/SMSAS.exe"
    LinkIncremental="2"
    IgnoreDefaultLibraryNames="nafxcwd.lib;libcpmtd.lib"
    GenerateDebugInformation="TRUE"
    ProgramDatabaseFile="$(OutDir)/SMSAS.pdb"
    SubSystem="1"
    TargetMachine="1"/>
  • deft0ndeft0n June 2011
    В свое время я убил кучу времени на LNK2005.
    Ну не хотела lib подключаться и все. Оказалось реально
    глюк VC 2003. Хотя ошибка и случай похоже другой,
    но проверить порядок подлючения библиотек стоит.

    http://www.rsdn.ru/article/mfc/DllMainAlreadyDefined.xml
  • WiperWiper June 2011
    Не понял? Я же пример привёл лечения.

    1. Смотрите лог и выписываете имена библиотек.
    2. Исключаете их из дефолтных.
    3. Вставляете их в дополнительные.

    Всё это описано в комментариях к ошибке линкера. Нужно только раз поискать.

Добро пожаловать!

Похоже, что Вы здесь впервые. Если хотите поучаствовать, нажмите на одну из этих кнопок!

Sign In with Twitter Sign In with OpenID Sign In with Google Login with Facebook

Войти Зарегистрироваться

In this Discussion

Tagged

Webparadox - разработка мобильных приложений под iOS и Android.