如何在Windows 64位计算机中将c++应用程序编译为x64模式
How to compile c++ application into x64 mode in Windows 64bit machine?
我安装了Windows SDK 7.1平台工具,并打开了一个名为Microsoft Windows 7 x64 Debug Build Environment
的终端。现在我想使用cl.exe
命令编译一个C++
应用程序(名为main.cpp
)。编译命令为:
cl main.cpp
然后,它输出main.obj
和main.exe
文件。但当我尝试运行main.exe
时,它在begin 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 nanosecondsn", (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 millisecondsn", mtime);
printf("Average time: %.6f nanosecondsn", (1e6*mtime)/1000/(nTrn*nTst));
#endif
delete[] trn_feat;
delete[] tst_feat;
delete[] dist;
}
以下是可能的答案:
- 安装
Visual Studio Community 2015
- 从
Visual Studio Group
打开Visual Studio x64 terminal
cl.exe main.cpp /link /machine:x64
然后输出一个CCD_ 16。
要运行main.exe
,有两个必要条件:
- 机器或CPU可以支持
__popcnt64
指令集。要检查机器是否支持它,请参阅__cpuid - Windows操作系统是64位的
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?