Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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/9/visual-studio/8.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++;使用VS2008的64位windows平台的静态库_C_Visual Studio_64 Bit - Fatal编程技术网

编译C++;使用VS2008的64位windows平台的静态库

编译C++;使用VS2008的64位windows平台的静态库,c,visual-studio,64-bit,C,Visual Studio,64 Bit,在VisualStudio2008中,如果配置类型是静态库,我在项目属性中看不到链接器选项。我需要为静态库指定/MACHINE:x64选项。我试图在Library中的命令行选项中指定此选项。只有这样,我才能构建静态库。如果我没有指定/MACHINE,编译静态库将失败 LNK1112:模块计算机类型“X86”与目标计算机类型“x64”冲突(即使我为解决方案将平台设置为x64) 通过项目属性库管理员将/MACHINE:X64指定为命令行,生成了静态库,但同一解决方案中的其他项目(配置类型:DLL)依

在VisualStudio2008中,如果配置类型是静态库,我在项目属性中看不到链接器选项。我需要为静态库指定/MACHINE:x64选项。我试图在Library中的命令行选项中指定此选项。只有这样,我才能构建静态库。如果我没有指定/MACHINE,编译静态库将失败 LNK1112:模块计算机类型“X86”与目标计算机类型“x64”冲突(即使我为解决方案将平台设置为x64)

通过项目属性库管理员将/MACHINE:X64指定为命令行,生成了静态库,但同一解决方案中的其他项目(配置类型:DLL)依赖于静态库,当生成DLL并尝试使用库中的某个函数时,我再次收到相同错误:

致命错误LNK112:模块计算机类型“X86”与目标计算机类型“x64”冲突


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

您是否尝试向现有项目添加新的项目配置(x64)

通常,在64位中生成时,不必编辑项目属性。您只需添加配置并确保解决方案配置正确(64位解决方案配置包含64位项目配置)


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

至于它的价值,我遇到了完全相同的问题

我有一个编译静态库的项目,创建一个“x64”配置并没有让它真正以x64为目标。我必须明确地将“/MACHINE:X64”作为“附加选项”添加到项目属性页中的“Library->Command Line”下,就像您所做的那样


我希望VisualStudio在属性页中将此设置作为一级属性公开,就像在动态库中一样(在“Linker->Advanced->Target Machine”下)。也许我遗漏了什么。

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

  • 首先对构建目录进行彻底清理,以防仍然有一些32位的对象文件存在,导致混乱
  • 检查项目的中间目录和输出目录。如果目标是
    Debug\Mylib.lib
    ,那么您将遇到问题,因为32位和64位库使用了相同的名称。我更喜欢选择所有配置和所有平台,然后将它们全部重命名为标准名称,如
    。\build\$(ProjectName)\$(ConfigurationName)。$(PlatformName)
  • 在configuration manager中检查,当您构建解决方案的64位配置时,它被配置为构建项目的64位配置(默认情况下并不总是这样)
  • 错误:
    模块计算机类型“X86”与目标计算机类型“x64”冲突
    表示对象文件已生成为32位,但项目的链接设置设置了标志
    /machine:x64
    。因此,这表明项目配置是32位的
  • 如果对您创建的内容有疑问,请选择一个对象文件,并在命令提示下键入:

    dumpbin/headers myfile.obj | findstr机器


这将向您展示您实际构建的体系结构。

我不理解第4点,您所说的“构建为32位,但项目的链接设置使用标志/machine:x64”是什么意思。我只能看到一个可以设置/machine类型的点。确实,在配置中只有一个点可以设置类型,但是32位和64位配置最终都会生成相同的输出文件,这将生成此错误。如果您使用的是
NMAKE
,而不是visual studio项目,也可能发生这种情况。