使用VS2008为64位Windows平台编译C ++静态库

时间:2009-09-08 12:22:55

标签: c visual-studio 64-bit

使用Visual Studio 2008,如果配置类型是静态库,我在项目属性中看不到链接器选项。我需要为静态库指定/ MACHINE:x64选项。我试图在Librarian的命令行选项中指定它。只有这样我才能构建静态库。如果我没有指定/ MACHINE编译静态lib失败了 LNK1112:模块机器类型'X86'与目标机器类型'x64'冲突(即使我将平台设置为X64以用于我的解决方案)。

使用/ MACHINE:X64通过Project-Properties-Librarian指定为命令行,静态库已构建,但同一解决方案中的其他项目(配置类型:DLL)依赖于静态库,当DLL为构建并尝试使用lib中的一个函数我再次得到相同的错误:

致命错误LNK1112:模块机器类型'X86'与目标机器类型'x64'冲突

请建议,如何构建64位静态库

3 个答案:

答案 0 :(得分:8)

对于它的价值,我遇到了同样的问题。

我有一个编译静态库的项目,并且创建“x64”配置并没有让它实际上以x64为目标。我必须在项目的属性页面中明确地将“/ MACHINE:X64”添加为“Librarian - > Command Line”下的“附加选项”,就像你一样。

我希望visual studio将此设置公开为属性页中的第一类属性,就像动态库一样(在“Linker - > Advanced - > Target Machine”下)。也许我错过了什么。

答案 1 :(得分:2)

正如Timbo所提到的,您需要确保拥有正在构建的x64配置。但是,还有其他一些需要注意的问题:

  • 如果您仍然有一些32位目标文件导致混淆,请先完全清理您的构建目录
  • 检查项目的中间和输出目录。如果目标是Debug\Mylib.lib,那么您将遇到问题,因为32位和64位库使用相同的名称。我更喜欢选择所有配置和所有平台,然后将它们全部重命名为..\build\$(ProjectName)\$(ConfigurationName).$(PlatformName)
  • 之类的标准
  • 检查配置管理器,确定在构建解决方案的64位配置时,配置它以构建项目的64位配置(默认情况下并不总是这样)
  • 错误:module machine type 'X86' conflicts with target machine type 'x64'表示目标文件已构建为32位,但项目的链接设置使用标记/machine:x64设置。所以这表明项目配置是32位。
  • 如果对您创建的内容有疑问,请选择一个目标文件并在命令提示符下键入:

    dumpbin /headers myfile.obj | findstr machine

这将向您展示您实际构建的架构。

答案 2 :(得分:1)

您是否尝试将新项目配置(x64)添加到现有项目中?

您通常不必编辑项目属性以构建64位。您只需添加配置并确保解决方案配置正确(64位解决方案配置包含64位项目配置)。

您可以通过打开 Build-> Configuration Manager 来检查这一点。我的Visual Studio有时会混淆这些设置并使项目无法编译,因此再次检查它可能有所帮助。