Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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++ 缺少应用程序的依赖项?_C++_Sql Server - Fatal编程技术网

C++ 缺少应用程序的依赖项?

C++ 缺少应用程序的依赖项?,c++,sql-server,C++,Sql Server,我有一个非常简单的应用程序,它解析一些文本文件并将记录插入SQL Server数据库 “它对我有用”,但在另一台机器上运行时,它会在以下行中崩溃: cmr->dateTimeStamp=TIMESTAMP_STRUCT{}; 对我来说,这意味着缺少一个与TIMESTAMP_STRUCT相关的依赖项,因为这是该行中唯一一个在此之前没有出现在程序中的内容 TIMESTAMP_STRUCT和SQLUSMALLINT是在sqltypes.h中定义的,而且它们只是typedef,所以我不希望在那里有任何

我有一个非常简单的应用程序,它解析一些文本文件并将记录插入SQL Server数据库

“它对我有用”,但在另一台机器上运行时,它会在以下行中崩溃:

cmr->dateTimeStamp=TIMESTAMP_STRUCT{};
对我来说,这意味着缺少一个与TIMESTAMP_STRUCT相关的依赖项,因为这是该行中唯一一个在此之前没有出现在程序中的内容

TIMESTAMP_STRUCT和SQLUSMALLINT是在sqltypes.h中定义的,而且它们只是typedef,所以我不希望在那里有任何依赖关系

我已经安装了SQL Server本机客户端11和目标机上的VisualC++运行时。< /P> 我还能错过什么

Visual Studio 2015,目标计算机是Windows Server 2008 R2


我在两台机器上使用相同的输入文件,但它只在一台机器上失败。

问题归结为编译器标志

这个项目一开始是一个玩具应用程序,用于一些完全无关的东西,里面有AVX指令。当指令集成为“真实”应用程序时,指向该指令集的标志从未取消设置

删除该编译器标志(/arch:AVX)将使程序在两台机器上都工作。
对我来说奇怪的是,这个程序中没有AVX指令,所以为什么设置的标志会导致两台机器之间的执行差异,特别是对于由基元类型组成的结构的初始化这样的良性操作?

是否不可能将其分解为多个部分,以找出哪个部分导致了问题?是否可以实现异常处理以捕获错误并更优雅地退出应用程序?
cmr
可能是以前错误的NULL。通过安装远程调试器(在应用程序崩溃的计算机上)并从开发计算机到测试/发布计算机进行远程调试来查找错误。仅供参考:对于缺少的依赖项,您将得到一个很好的对话框,告诉您缺少什么。C API中的异常多次有误导性的描述。我有时使用MFC层,有这样的问题。你到底有什么异常?是同一个输入文件。并且cmr不是null(已验证)。这就是为什么我怀疑这两台机器之间存在依赖性问题。我将分解该结构赋值,看看它是否讨厌它的某些特定内容,但这似乎不太可能,因为它们只是int。刚刚测试过。抛出错误的是结构的创建。它以异常代码1d退出,MSDN说这是错误写入错误,在这种情况下对我来说毫无意义。我已经编辑了代码示例以匹配当前失败的代码。您是如何确定的?你看过assy代码了吗?确定具体是什么?玩具应用程序中有AVX指令,因为我把它们放在那里了。我正在测试它对特定代码段的影响。如何知道编译器标志影响了当前应用程序?因为我在旗子开着的情况下跑了一次,旗子关着的情况下跑了一次。如何知道当前应用程序中没有AVX指令?如果编译器只是因为设置了那个标志而机会主义地使用它们,我想我不会。不过,我不知道它在哪里以及如何使用它,而且VS的汇编输出没有显示任何AVX指令,所以我不知所措。在源代码中插入AVX指令是一个编译器/cpu扩展。OTOH,/arch:AVX选项使编译器能够利用cpu的AVX指令,这些指令在编译时可能生成,也可能不生成。