警告LNK4254:“ATL”部分(50000040)合并为具有不同属性的“.rdata”(40000040)

时间:2012-12-20 12:12:51

标签: c++ linker warnings atl

我的项目多次收到此警告:

warning LNK4254: section 'ATL' (50000040) merged into '.rdata' (40000040) with different attributes

我正在使用Visual Studio 2010 Professional Edition(2010版本的编译器)编译,但VC ++ 2005 库。

这似乎是原因。如果我使用2010库或2005编译器,问题就会消失而不会更改代码。但是,如果可能的话,我想一起使用2005库和2010编译器。

有人知道如何解决这个问题,或者这些警告是否可以安全地忽略/禁用?

谢谢。

编辑:问题似乎是由atlbase.h的变化引起的:

2005:

#if defined(_M_IA64) || defined(_M_IX86) || defined (_M_AMD64)

#pragma section("ATL$__a", read, shared)
#pragma section("ATL$__z", read, shared)
#pragma section("ATL$__m", read, shared)
extern "C"
{
__declspec(selectany) __declspec(allocate("ATL$__a")) _ATL_OBJMAP_ENTRY* __pobjMapEntryFirst = NULL;
__declspec(selectany) __declspec(allocate("ATL$__z")) _ATL_OBJMAP_ENTRY* __pobjMapEntryLast = NULL;
}

#if !defined(_M_IA64)
#pragma comment(linker, "/merge:ATL=.rdata")
#endif

#else

extern "C"
{
__declspec(selectany) _ATL_OBJMAP_ENTRY* __pobjMapEntryFirst = NULL;
__declspec(selectany) _ATL_OBJMAP_ENTRY* __pobjMapEntryLast = NULL;
}

#endif  // defined(_M_IA64) || defined(_M_IX86)

2010:

#pragma section("ATL$__a", read)
#pragma section("ATL$__z", read)
#pragma section("ATL$__m", read)
extern "C"
{
__declspec(selectany) __declspec(allocate("ATL$__a")) _ATL_OBJMAP_ENTRY* __pobjMapEntryFirst = NULL;
__declspec(selectany) __declspec(allocate("ATL$__z")) _ATL_OBJMAP_ENTRY* __pobjMapEntryLast = NULL;
}

#if !defined(_M_IA64)
#pragma comment(linker, "/merge:ATL=.rdata")
#endif

但我不知道如何利用这些知识来解决我的问题:(

0 个答案:

没有答案