Opened 3 years ago

Closed 3 years ago

#11339 closed Bugs (fixed)

VC12 LNK2005 error with boost::container::adaptive_pool

Reported by: anonymous Owned by: Ion Gaztañaga
Milestone: To Be Determined Component: container
Version: Boost 1.58.0 Severity: Problem
Keywords: Cc:


Unfortunately I cannot reproduce it in a test project. The problem appears when a delayed load DLL is linked to the main app. The error is Delayimp.lib(delayhlp.obj) : error LNK2005: HRESULT_FROM_WIN32 already defined in libboost_container-vc120-mt-1_58.lib(alloc_lib.obj)

(Making the DLL non-delayed makes the error go away.) This seems to be related to unsetting the FORCEINLINE define in dlmalloc_ext_2_8_6.c (line 34). I am not sure it it was an intention but FORCEINLINE is also defined in windows headers and unsetting it un-inlines windows functions included in dlmalloc_2_8_6.c (line 544), e.g.

FORCEINLINE HRESULT HRESULT_FROM_WIN32(unsigned long x) { return (HRESULT)(x) <= 0 ? (HRESULT)(x) : (HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000);}

in winerror.h

Commenting out the line 34 in dlmalloc_ext_2_8_6.c fixes this but perhaps this define should have a different name, e.g. CONT_FORCEINLINE (?) Thanks.

Change History (1)

comment:1 Changed 3 years ago by Ion Gaztañaga

Resolution: fixed
Status: newclosed

Thanks for the report. Tried a fix in:

[develop 5d35aec] Fixed Trac #11339 ("VC12 LNK2005 error with boost::container::adaptive_pool")

2 files changed, 5 insertions(+), 1 deletion(-)

The macro could be deleted for all except GCC which does not like the default dlmalloc's definition

Note: See TracTickets for help on using tickets.