代码之家  ›  专栏  ›  技术社区  ›  Kevin Day

VisualC++ 2005不为链接器添加/DLL参数

  •  3
  • Kevin Day  · 技术社区  · 16 年前

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

    背景:

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

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

    对winmaincrtstartup的引用非常可疑,因为这是一个dll(它根本不应该有winmaincrtstartup函数)。对资源的搜索表明没有定义这样的函数,所以我的结论是链接器正在向我们提供它。

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

    /out:“debug\thedll.dll”/增量/manifest/manifestfile:“debug\thedll.dll.intermediate.manifest”/def:“.\thedll.def”/调试/pdb:“\debug\thedll.pdb”/子系统:Windows/machine:x86 version.lib

    缺少一个高度关键的命令行参数:/dll

    如果手动添加此参数(使用项目属性、配置属性\链接器\命令行设置),我可以获得要正确编译的内容。

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

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

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

    很明显,在我手动调整之前,vs忽略了设置。RGGGG

    2 回复  |  直到 12 年前
        1
  •  1
  •   Jeremy    16 年前

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

        2
  •  0
  •   dream_world    12 年前

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