这是一个非常简单的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++ Compiler 2008(标准 enu)x86 和 x64,并且正在使用 64 位版本的 Windows (7)。
这里有什么问题?
更新:
好吧,现在我跑了
vcvarsall.bat amd64
。它说“缺少指定的配置类型。可能未安装此配置的工具。”。如前所述,编译器显然已安装??
如果您查看 vcvarsall.bat,如果某些批处理文件丢失,它将打印指定的配置丢失语句。
对于 amd64 选项,此文件必须存在:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat
您的设置有问题。它对我来说编译和链接很好。
D:>cl test.cpp Microsoft (R) C/C++ 优化编译器版本 15.00.30729.01(适用于 x64) 版权所有 (C) Microsoft Corporation。 版权所有 保留。
test.cpp Microsoft (R) 增量 链接器版本 9.00.30729.01 版权所有 (C) 微软公司。 版权所有 保留。
/out:test.exe test.obj
D:>
在尝试运行 cl.exe 之前,您是否使用正确的选项运行 vcvarsall.bat 来设置环境变量?沿着
线的东西“C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC cvarsall.bat”x86_amd64
您使用的是 32 位还是 64 位系统?我从路径中猜测 64 位标准库不可用,至少在该目录中不可用。