Visual c++ visualc&x2B+;2005年没有';t为链接器添加/dll参数

Visual c++ visualc&x2B+;2005年没有';t为链接器添加/dll参数,visual-c++,linker,Visual C++,Linker,Visual Studio 2005项目中的哪些设置可能导致生成不将/dll参数添加到链接器命令行 背景: 我们有一个大型VC6项目,我正在将其移植到VC2005。此项目包含多个MFC扩展DLL,运行生成时遇到以下链接器警告: 警告LNK4086:入口点“\u WinMainCRTStartup”不是带有12字节参数的\u stdcall;映像可能无法运行 对_WinMainCRTStartup的引用非常可疑,因为这是一个DLL(它根本不应该有_WinMainCRTStartup函数)。对源代码

Visual Studio 2005项目中的哪些设置可能导致生成不将/dll参数添加到链接器命令行

背景:

我们有一个大型VC6项目,我正在将其移植到VC2005。此项目包含多个MFC扩展DLL,运行生成时遇到以下链接器警告:

警告LNK4086:入口点“\u WinMainCRTStartup”不是带有12字节参数的\u stdcall;映像可能无法运行

对_WinMainCRTStartup的引用非常可疑,因为这是一个DLL(它根本不应该有_WinMainCRTStartup函数)。对源代码的搜索表明没有定义这样的函数,所以我的结论是它是由链接器提供给我们的

查看linker.exe命令行参数可以发现问题(为了简洁起见,我删除了完整路径):

/输出:“Debug\theddll.dll”/INCREMENTAL/MANIFEST/MANIFESTFILE:“Debug\theddll.dll.intermediate.MANIFEST”/DEF:“.\theddll.DEF”/Debug/PDB:“\Debug\theddll.PDB”/SUBSYSTEM:WINDOWS/MACHINE:X86 version.lib

缺少非常关键的命令行参数:/DLL

如果手动添加此参数(使用项目属性、配置属性\Linker\Command Line设置),则可以正确编译

但是我想知道项目配置中的什么导致linker.exe的/DLL命令行设置被忽略

我创建了一个带有扩展DLL的临时项目,并对.vcproj文件进行了并行比较,但我看不到任何会影响此操作的特定设置

编辑-我已经检查了配置类型的配置属性\常规\项目默认设置。它被设置为动态库(.dll)


EDIT2-显然,VS忽略了设置,直到我手动调整它。rggggg

我建议的第一件事是验证项目的配置类型是否设置为Dynamic Library。右键单击项目->选择属性->选择常规->配置类型。

链接器似乎想要构建一个控制台程序。打开项目属性。选择常规设置。在那里选择配置类型Dynamic Library。

谢谢-我已经检查了一个配置类型(并在OP中添加了一个指示正确值的编辑),我只是将项目的配置类型更改为EXE,然后再次返回DLL。点击apply,现在/DLL出现在命令行中。M$在GUI中糟糕的更改处理算法浪费了3个小时的时间。作为参考,这里有一篇MSDN文章描述了/DLL参数以及如何设置它:关于这一点的更多想法-导致链接器/ICREMENTAL标志包含在调试配置中但不包含在发布配置中的设置在哪里?也许我的问题是在同一个地方…有线我击中了同样的问题,现在在一个项目,我们仍然保持VS2005。最后它自己解决了,我希望我能弄清楚它为什么会这样(我怀疑与pch有关)。