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

Reply via email to