非常简单的C程序不能用VC 64编译

时间:2010-03-30 20:13:15

标签: c visual-studio-2008 compiler-construction

这是一个非常简单的C程序:

#include <stdio.h>

int main (int argc, char *argv[]) {

    printf("sizeof(short) = %d\n",(int)sizeof(short));
    printf("sizeof(int) = %d\n",(int)sizeof(int));
    printf("sizeof(long) = %d\n",(int)sizeof(long));
    printf("sizeof(long long) = %d\n",(int)sizeof(long long));
    printf("sizeof(float) = %d\n",(int)sizeof(float));
    printf("sizeof(double) = %d\n",(int)sizeof(double));

    return 0;
}

虽然它在Win32(命令行:cl main.c)上编译得很好,但它没有使用Win64编译器("c:\Program Files(x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\cl.exe" main.c)。具体来说,它是“错误LNK2019:函数main中引用的未解析的外部符号printf”。据我了解,它无法链接到printf,对吧?

显然,我安装了Microsoft Visual C ++编译器2008(标准版)x86和x64,并且正在使用64位版本的Windows(7)。

这里有什么问题?

更新
好的,现在我跑了vcvarsall.bat amd64。它是“缺少指定的配置类型。可能未安装此配置的工具。”。如前所述,编译器显然是安装的?

3 个答案:

答案 0 :(得分:2)

您的设置有问题。它编译和编译链接很好。

  

D:&gt; cl test.cpp Microsoft(R)C / C ++   优化编译器版本   15.00.30729.01 for x64版权所有(C)Microsoft Corporation。所有权利   保留

     

test.cpp Microsoft(R)Incremental   链接器版本9.00.30729.01版权所有   (C)Microsoft Corporation。所有权利   保留

     

/out:test.exe test.obj

     

d产品:&gt;

在尝试运行cl.exe之前,您是否使用正确的选项运行vcvarsall.bat来设置环境变量?

的一些方面
  

“C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ vcvarsall.bat”x86_amd64

答案 1 :(得分:1)

如果查看vcvarsall.bat,如果缺少某些批处理文件,它将打印指定的配置缺失语句。

对于amd64选项,此文件必须存在:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat

答案 2 :(得分:0)

您使用的是32位还是64位系统?我猜测64bit标准库不可用,至少不在那个目录中。