2

プロジェクトでこの警告を何度も受け取ります。

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

2010 バージョンのコンパイラである Visual Studio 2010 Professional Edition を使用してコンパイルしていますが、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

しかし、この知識を使用して問題を解決する方法がわかりません:(

4

0 に答える 0