|
|
|
Глюк в Visual C++. Как обойти?
|
|||
|---|---|---|---|
|
#18+
Всем привет, У меня 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) В чем проблема? То что это не мой глюк это точно. Поскольку между его заскоками с работой-неработой я свой код вообще не менял !!!. Для пофиксенья данной ошибки мне приходится пересоздавать проект и копировать код целиком из старого проекта в новый. И тогда все опять работает но не надолго. В общем не совсем удобно :(. Заранее спасибо за любую помощь в обходе данной ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 18:58 |
|
||
|
Глюк в Visual C++. Как обойти?
|
|||
|---|---|---|---|
|
#18+
Иногда помогает удалить с диска промежуточные результаты компилятор/линкера, т.е. каталоги типа debug и Release ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 10:27 |
|
||
|
Глюк в Visual C++. Как обойти?
|
|||
|---|---|---|---|
|
#18+
Скорее всего в проге присутствует какая то некорректная работа с памятью, хэндл там не закрыл, или трэд. В таких случаях помогает перегрузить машину и удалить временные ф-лы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 13:21 |
|
||
|
Глюк в Visual C++. Как обойти?
|
|||
|---|---|---|---|
|
#18+
(с тем же самым кодом !!! Ничего не менялось что странно !!!). Не бывает (с) :) Ошибка LNK2005 говорит о том, что указанный символ (переменная или функция) определен более одного раза (подробнее посмотри соответствующие статьи в MSDN). Проверь список подключаемых библиотек, проверь свои подключаемые исходники и пр. Если ничего не менялось в проекте, то значит что-то менялось вне его, от чего твой проект зависит... Судя по тому, что ругань на операторы new и delete, возможно проблема в том, что ты пытаешься слинковаться с дебажной и с релизными версиями каких-то либок. Проверь для конфигруаций Release и Debug настройки в пунктах с/с++\Code Generation\Runtime library Linker\Input\Additional Dependencies ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 13:49 |
|
||
|
Глюк в Visual C++. Как обойти?
|
|||
|---|---|---|---|
|
#18+
Поищите описание ошбки - там есть рецепт лечения. В кратце - надо посмотреть подробный лог. Исключить из дефолтных эти библиотеки и добавить их как дополнительные. При этом возможно придётся поэкспериментировать с порядком следования. Если я не ошибаюсь, то порядок обратен тому, который описан в ошибке. Вот кусок *.vcproj <Tool 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"/> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 16:14 |
|
||
|
Глюк в Visual C++. Как обойти?
|
|||
|---|---|---|---|
|
#18+
Забыл добавить - для релиза и для дебага, естественно, библиотеки разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 16:15 |
|
||
|
Глюк в Visual C++. Как обойти?
|
|||
|---|---|---|---|
|
#18+
В свое время я убил кучу времени на LNK2005. Ну не хотела lib подключаться и все. Оказалось реально глюк VC 2003. Хотя ошибка и случай похоже другой, но проверить порядок подлючения библиотек стоит. http://www.rsdn.ru/article/mfc/DllMainAlreadyDefined.xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 13:46 |
|
||
|
Глюк в Visual C++. Как обойти?
|
|||
|---|---|---|---|
|
#18+
Очень часто сталкиваюсь с такой проблемой. Помогает удаление obj файлов. А также как ни странно!!! - просто нажимаю на кнопку start (которая в VC, конечно) и прога компилится!!! Тогда что же я подключаю дважды, если она компилится и выполняется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 15:23 |
|
||
|
Глюк в Visual C++. Как обойти?
|
|||
|---|---|---|---|
|
#18+
Не понял? Я же пример привёл лечения. 1. Смотрите лог и выписываете имена библиотек. 2. Исключаете их из дефолтных. 3. Вставляете их в дополнительные. Всё это описано в комментариях к ошибке линкера. Нужно только раз поискать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 17:22 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=390&tid=2032710]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 428ms |

| 0 / 0 |
