如何在Windows 64位机器上将c ++应用程序编译为x64模式?

我已经安装了Windows SDK 7.1平台工具,并且打开了一个名为Microsoft Windows 7 x64 Debug Build Environment的terminal。 现在我想使用cl.exe命令编译一个C++应用程序(名为main.cpp )。 编译命令是:

  cl main.cpp 

然后,它输出main.objmain.exe文件。 但是当我试图运行main.exe ,在begin computing dist和在end computing dist.之前崩溃了end computing dist. 我想我应该把应用程序编译成x64程序。 请问有人可以提供意见吗?

main.cpp如下:

  #include <cstdio> #include <cstdlib> #ifdef _MSC_VER typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; #include <intrin.h> #include <windows.h> #else #include <stdint.h> #include <sys/time.h> #include <unistd.h> #endif int main(int argc, char **argv) { int nTrn = 10; int nTst = 10; int nDim = 1; // 64 bit printf("allocate memory for feats.\n"); uint64_t *trn_feat = new uint64_t[nTrn]; // nTrn x nDim uint64_t *tst_feat = new uint64_t[nTst]; // nTst x nDim printf("initialize the feats.\n"); for(int i=0; i<nTrn; i++) trn_feat[i] = (((uint64_t) rand() << 0) & 0x000000000000FFFFull) | (((uint64_t) rand() << 16) & 0x00000000FFFF0000ull) | (((uint64_t) rand() << 32) & 0x0000FFFF00000000ull) | (((uint64_t) rand() << 48) & 0xFFFF000000000000ull); for(int i=0; i<nTst; i++) tst_feat[i] = (((uint64_t) rand() << 0) & 0x000000000000FFFFull) | (((uint64_t) rand() << 16) & 0x00000000FFFF0000ull) | (((uint64_t) rand() << 32) & 0x0000FFFF00000000ull) | (((uint64_t) rand() << 48) & 0xFFFF000000000000ull); printf("allocate memory for dist matrix.\n"); uint64_t *dist = new uint64_t[nTrn*nTst]; #ifdef _MSC_VER LARGE_INTEGER StartingTime, EndingTime, ElapsedMicroseconds; LARGE_INTEGER Frequency; QueryPerformanceFrequency(&Frequency); QueryPerformanceCounter(&StartingTime); #else struct timeval start, end; long seconds, useconds; double mtime; gettimeofday(&start, NULL); #endif printf("begin computing dist.\n"); for(int iter=0; iter<100; iter++) { for(int i=0; i<nTrn; i++) { for(int j=0; j<nTst; j++) { uint64_t n = (trn_feat[i] ^ tst_feat[j]); #ifdef _MSC_VER dist[i*nTst + j] = __popcnt64(n); #else dist[i*nTst + j] = __builtin_popcountll(n); #endif } } } printf("end computing dist.\n"); #ifdef _MSC_VER QueryPerformanceCounter(&EndingTime); ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart; ElapsedMicroseconds.QuadPart *= 1000000; ElapsedMicroseconds.QuadPart /= Frequency.QuadPart; double mtime = (double)ElapsedMicroseconds.QuadPart; printf("Average time: %.6f nanoseconds\n", (1e6*mtime)/100/(nTrn*nTst)); #else gettimeofday(&end, NULL); seconds = end.tv_sec - start.tv_sec; useconds = end.tv_usec - start.tv_usec; mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5; printf("Total elapsed time: %.6f milliseconds\n", mtime); printf("Average time: %.6f nanoseconds\n", (1e6*mtime)/1000/(nTrn*nTst)); #endif delete[] trn_feat; delete[] tst_feat; delete[] dist; } 

以下是可能的答案:

  1. 安装Visual Studio Community 2015
  2. Visual Studio Group打开Visual Studio x64 terminal
  3. cl.exe main.cpp /link /machine:x64

然后一个main.exe输出。

要运行main.exe ,有两个必要的条件:

  1. 机器或CPU可以支持__popcnt64指令集。 要检查机器是否支持它,请参阅__cpuid 。
  2. Windows操作系统是64位。