我的项目多次收到此警告:
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
但我不知道如何使用这些知识来解决我的问题:(