Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 警告LNK4254:第&x27节;ATL&x27;(50000040)合并到';中;。rdata';(40000040)具有不同的属性_C++_Linker_Warnings_Atl - Fatal编程技术网

C++ 警告LNK4254:第&x27节;ATL&x27;(50000040)合并到';中;。rdata';(40000040)具有不同的属性

C++ 警告LNK4254:第&x27节;ATL&x27;(50000040)合并到';中;。rdata';(40000040)具有不同的属性,c++,linker,warnings,atl,C++,Linker,Warnings,Atl,对于我的项目,我多次收到此警告: warning LNK4254: section 'ATL' (50000040) merged into '.rdata' (40000040) with different attributes 我使用的是Visual Studio 2010专业版,2010版的编译器,但是VC++2005库 这似乎是原因。如果我使用2010库或2005编译器,问题就会消失,代码也不会改变。但是,如果可能的话,我想同时使用2005库和2010编译器 是否有人知道如何修复此问

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

warning LNK4254: section 'ATL' (50000040) merged into '.rdata' (40000040) with different attributes
我使用的是Visual Studio 2010专业版,2010版的编译器,但是VC++2005

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

是否有人知道如何修复此问题,或者忽略/禁用这些警告是否绝对安全

多谢各位

编辑:问题似乎是由atlbase中的更改引起的。h:

2005年:

2010年:


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

有一个选择平台工具集的项目选项,但不幸的是,我认为您只能备份到2008工具集。是否有理由需要使用旧的VS2005库。VC可再发行文件支持并行安装。感谢您的评论。我手动修改了MSBuild平台工具集文件,以便转到b确认到目前为止。此程序必须能够在Windows Vista安装上运行,而我无法安装任何VC++可再发行文件。我必须回溯到Vista SP0随附的开箱即用。VC++2005是最新版本,这对AFAIK来说是正确的。另一种方法是将可再发行DLL放在ins上的exe文件夹中或者您可以静态链接,但IMHO在安装时将DLL放到同一文件夹中是更好的选择。您是否尝试将ATL库与VS 2010 Express一起使用,并且ATL来自WDK?我想您必须修补ATL LIB以具有匹配的节标志(AFAIR这是符合DEP要求的)另请参阅和@niemiro:如果您使用的是Pro版本,Visual Studio本身提供的ATL版本会更新。旧的ATL可能对没有ATL的Express Edition有意义。很难说忽略警告是否安全,我会在启用DEP的系统上尝试并检查其运行情况。如果它很好,那么也许您可以别理它。
#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)
#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