使用Visual Studio 2008,如果配置类型是静态库,我在项目属性中看不到链接器选项。我需要为静态库指定/ MACHINE:x64选项。我试图在Librarian的命令行选项中指定它。只有这样我才能构建静态库。如果我没有指定/ MACHINE编译静态lib失败了 LNK1112:模块机器类型'X86'与目标机器类型'x64'冲突(即使我将平台设置为X64以用于我的解决方案)。
使用/ MACHINE:X64通过Project-Properties-Librarian指定为命令行,静态库已构建,但同一解决方案中的其他项目(配置类型:DLL)依赖于静态库,当DLL为构建并尝试使用lib中的一个函数我再次得到相同的错误:
致命错误LNK1112:模块机器类型'X86'与目标机器类型'x64'冲突
请建议,如何构建64位静态库
答案 0 :(得分:8)
对于它的价值,我遇到了同样的问题。
我有一个编译静态库的项目,并且创建“x64”配置并没有让它实际上以x64为目标。我必须在项目的属性页面中明确地将“/ MACHINE:X64”添加为“Librarian - > Command Line”下的“附加选项”,就像你一样。
我希望visual studio将此设置公开为属性页中的第一类属性,就像动态库一样(在“Linker - > Advanced - > Target Machine”下)。也许我错过了什么。
答案 1 :(得分:2)
正如Timbo所提到的,您需要确保拥有正在构建的x64配置。但是,还有其他一些需要注意的问题:
Debug\Mylib.lib
,那么您将遇到问题,因为32位和64位库使用相同的名称。我更喜欢选择所有配置和所有平台,然后将它们全部重命名为..\build\$(ProjectName)\$(ConfigurationName).$(PlatformName)
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有时会混淆这些设置并使项目无法编译,因此再次检查它可能有所帮助。