Your best bet would be to examine the command line used by the .vcproj files (in MSVC++ I suspect) and see what differs.
- Alfred -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jorge Rodriguez Sent: Saturday, October 01, 2005 7:22 PM To: [email protected] Subject: Re: [hlcoders] memoverride.cpp voodoo! Alfred Reynolds wrote: >You need to link to the static C libraries and not the dynamic ones. >Memoverride.cpp causes the link to use our version of malloc(), free(), >etc when using the static library (and these calls all get directed into >the tier0 memory management code). > >- Alfred > Total utter genius. That said, memoverride.cpp will compile without any warnings, but linking still produces this: Linking... LIBCD.lib(dbgheap.obj) : error LNK2005: _malloc already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __malloc_dbg already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __nh_malloc already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __nh_malloc_dbg already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __heap_alloc already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: _calloc already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __calloc_dbg already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: _realloc already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __realloc_dbg already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __expand already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __expand_dbg already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: _free already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __free_dbg already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __msize already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __msize_dbg already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtSetBreakAlloc already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtSetDbgBlockType already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtSetAllocHook already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtCheckMemory already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtSetDbgFlag already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtDoForAllClientObjects already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtIsValidPointer already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtIsValidHeapPointer already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtIsMemoryBlock already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtSetDumpClient already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtMemCheckpoint already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtMemDifference already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtMemDumpAllObjectsSince already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtDumpMemoryLeaks already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __CrtMemDumpStatistics already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __crtBreakAlloc already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : error LNK2005: __crtDbgFlag already defined in memoverride.obj LIBCD.lib(malloc.obj) : error LNK2005: __malloc_base already defined in memoverride.obj LIBCD.lib(heapinit.obj) : error LNK2005: __heap_init already defined in memoverride.obj LIBCD.lib(heapinit.obj) : error LNK2005: __heap_term already defined in memoverride.obj LIBCD.lib(heapinit.obj) : error LNK2005: __amblksiz already defined in memoverride.obj LIBCD.lib(sbheap.obj) : error LNK2005: __get_sbh_threshold already defined in memoverride.obj LIBCD.lib(sbheap.obj) : error LNK2005: __set_sbh_threshold already defined in memoverride.obj LIBCD.lib(dbgheap.obj) : warning LNK4006: _malloc already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __malloc_dbg already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __nh_malloc already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __nh_malloc_dbg already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __heap_alloc already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: _calloc already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __calloc_dbg already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: _realloc already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __realloc_dbg already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __expand already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __expand_dbg already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: _free already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __free_dbg already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __msize already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __msize_dbg already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtSetBreakAlloc already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtSetDbgBlockType already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtSetAllocHook already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtCheckMemory already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtSetDbgFlag already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtDoForAllClientObjects already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtIsValidPointer already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtIsValidHeapPointer already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtIsMemoryBlock already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtSetDumpClient already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtMemCheckpoint already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtMemDifference already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtMemDumpAllObjectsSince already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtDumpMemoryLeaks already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __CrtMemDumpStatistics already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __crtBreakAlloc already defined in memoverride.obj; second definition ignored LIBCD.lib(dbgheap.obj) : warning LNK4006: __crtDbgFlag already defined in memoverride.obj; second definition ignored LIBCD.lib(malloc.obj) : warning LNK4006: __malloc_base already defined in memoverride.obj; second definition ignored LIBCD.lib(heapinit.obj) : warning LNK4006: __heap_init already defined in memoverride.obj; second definition ignored LIBCD.lib(heapinit.obj) : warning LNK4006: __heap_term already defined in memoverride.obj; second definition ignored LIBCD.lib(heapinit.obj) : warning LNK4006: __amblksiz already defined in memoverride.obj; second definition ignored LIBCD.lib(sbheap.obj) : warning LNK4006: __get_sbh_threshold already defined in memoverride.obj; second definition ignored LIBCD.lib(sbheap.obj) : warning LNK4006: __set_sbh_threshold already defined in memoverride.obj; second definition ignored Creating library C:\build\hl2sdk\lib\Debug\client.lib and object C:\build\hl2sdk\lib\Debug\client.exp C:\build\hl2sdk\lib\Debug\client.dll : fatal error LNK1169: one or more multiply defined symbols found but if I set /FORCE:MULTIPLE the game loads and plays fine, and malloc() resolves to the one in memoverride.cpp, as if my magic. It works perfectly now! Many thanks to Alfred. Is there any way I can get by without /FORCE:MULTIPLE ? The Valve SDK doesn't seem to need it, and doesn't have those errors. It also keeps me from using incremental linking, which is necessary for edit and continue debug sessions, and is just generally much faster. How does the Valve SDK get by without it? -- Jorge "Vino" Rodriguez _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders

