问题标签 [msvc12]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
461 浏览

c++ - 解析静态库中的符号——什么时候发生?

错误

我在构建项目时收到了unresolved external symbol一个依赖项,我想了解为什么这在早期不是问题。

背景资料

项目依赖图是这样的:

所以,我有 FreeImage 的头文件和静态库。

我建立了gazebo_common,明确地静态链接到FreeImaged.lib

我建立了凉亭,明确地静态链接到 FreeImage.libGazebo_common.lib

我构建 wpilibC++Sim,明确地静态链接到gazebo.lib 和gazebo_common.lib 但不是FreeImaged.lib

我构建了我的 FRCUserProgram,明确地静态链接到gazebo.lib、gazebo_common.lib 和 FreeImaged.lib

但是,当我这样做时,我会unresolved external symbol __imp_FreeImage_InitializeImage.cc.obj.

我做了什么调查

现在,使用神奇的dumpbin /SYMBOLS命令,我可以清楚地看到FreeImaged.lib包含符号FreeImage_Initialize而不是符号__imp_FreeImage_Initialize。我知道 __imp_ 告诉我它是一个要从 DLL 导入的函数。然而,一切都应该是静态链接的,所以无论把那个符号放进Image.cc.obj去都做错了。

为了解决这个问题,我可以链接FRCUserProgram.exe到 FreeImage 的动态库,或者我可以使用定义的变量重建gazebo_common(以及 Image.cc.obj)FREEIMAGE_LIB,这将防止 __declspec(import) 和 __imp_ 被添加到符号前面.

最重要的是,任何地方都没有 Dll。它不存在。我没有。我正在尝试使用静态库FreeImaged.lib。所以我认为正确的做法是定义FREEIMAGE_LIB,以便Image.cc.obj在其中内置正确的符号。当然这有效,但我不明白为什么这不是更早的问题!

问题:

为什么需要为 FRCUserProgram.exe 而不是 Gazebo.exe 解析这些符号?

0 投票
7 回答
1463 浏览

windows - 在 Windows 上阻塞标准输入时退出应用程序

我有一个应用程序,它在线程中使用 getline() 从标准输入读取数据。我想从主线程关闭应用程序,而 getline 仍然阻塞另一个线程。如何做到这一点?

我不想强迫用户必须按 ctrl-Z 来关闭标准输入和应用程序。

到目前为止,我已经在 Windows 8.1 64 位 v120 平台工具集上尝试了我的编译器设置 (RuntimeLibrary=/MT):

  • freopen stdin,但被内部锁阻塞
  • 破坏线程,调用 abort()
  • 放回一个 Eof,行尾到 std::cin,它也被阻塞了

* 更新 *

  • detach() 不起作用,exit() 被锁阻塞
  • winapi TerminatThread() 调用 abort()
  • winapi CloseHandle(GetStdHandle(STD_INPUT_HANDLE)) 挂起
  • 调用 TerminateProcess() - 有效,但我想优雅地退出

*更新2:解决方案*

  • WriteConsoleInput() 可以使 std::getline() 从阻塞读取中返回。这适用于任何 msvc 运行时库。有关工作解决方案的代码,请参阅接受的答案。

显示问题的示例代码:

0 投票
1 回答
4417 浏览

c++ - Can not configure compiler and build kit for Qt 5.5

I just have installed on a clean windows 10, visual studio 2015 and Qt Creator 5.5...I have some source code that depend on some libraries (lib) files which I believe were compiled using msvc2012.

The Qt can not compile my project and always complains that selected compiler can not compile for Qt 5.5...I have spent hours on this but still no success...Would someone kindly tell me what should I do? Here is some photos of my Qt build options: enter image description here

0 投票
0 回答
65 浏览

visual-c++ - boost:如何在构建 boost 测试时指定特定的 msvcrt.lib

我正在尝试使用用于构建其他项目的特定 msvcrt.lib 文件来构建 boost。我没有找到可以控制这个库的标志或配置部分。

默认情况下,boost 使用机器上安装的内容。有没有办法用特定的 msvcrt.lib 文件覆盖它?

0 投票
1 回答
413 浏览

c++ - Why sleep_for calls FreeLibrary?

I'm shocked to trace this simple code:

Guess what ? sleep_for calls FreeLibrary everytime !

Why sleep_for had to call FreeLibrary ?

This program will take 2 seconds with boost library, and will take > 3 minutes (lose my patience) with msvcrt (Release mode). I can't imagine.

0 投票
2 回答
576 浏览

c++ - Delphi:使用调试器调用 C dll 函数需要 15 秒,而没有调试器需要 0.16 秒。为什么?

我有以下设置:

  1. 用 Delphi XE5 编写并内置 Debug 64 位的 Delphi 命令行应用程序。
  2. AC dll 用 Microsoft Visual Studio 2013 编写并内置于 64 位版本。
  3. Delphi 命令行应用程序调用 C dll 中的函数。

出乎意料:

  1. 在 Delphi XE5 IDE 中调试 Delphi 命令行应用程序时,C dll 函数调用需要 15 秒。
  2. 当直接启动相同的 Delphi 命令行应用程序(没有 IDE,没有调试器)时,C dll 函数调用需要 0.16 秒。

Delphi命令行应用程序源码:

C dll源代码:

Delphi + C dll 源代码:DelphiCpplibraryCall.zip

运行时比较:

  • 第一个控制台:在 IDE 中调试时
  • 第二个控制台:在没有 IDE 的情况下启动

运行时比较

由于某种原因,Delphi 调试器似乎大大减慢了 C dll 函数调用的速度,这使得调试几乎不可能。

有没有人知道什么可以解决这个问题或如何避免它?非常感谢。

编辑:我现在可以确认所描述的行为根本不限于 Delphi IDE 和调试器。如果我:

  1. 我在 Microsoft Visual Studio 2013 的 Release 中构建了 C dll。
  2. 并在 Visual Studio 2013 中构建和调试调用 C dll 的命令行可执行文件。

这意味着 C dll 发布构建函数执行时间会根据是否附加调试器而变化。

我还可以确认,delete values;只要存在调试器,删除 unordered_map ( ) 就需要这么长时间。

0 投票
4 回答
4711 浏览

c++ - std::thread 导致 DLLMain 死锁

所以,这就是我所说的:std 很复杂。

在 VS2013 中这个简单的程序会导致死锁。

在 DLLMain 中创建线程是完全错误的吗?这不是真的。来自 Microsoft 的文档“创建 DLL 的最佳实践”:“如果不与其他线程同步,创建线程可以工作”。所以 CreateThread 有效, _beginthreadex 有效, boost::thread 有效,但 std::thread 无效。这是调用堆栈:

好的,std::thread 将“与其他线程同步”。

但为什么 ?

我希望这在 VS2015 中再也不会发生,我还没有测试它。

0 投票
0 回答
55 浏览

windows - 如何检测运行我的代码的 MSVC 分析器?

我正在寻找类似于 Windows API 的东西,IsDebuggerPresent()但要确定代码是否正在 MSVC2013 下进行分析。这样的 API 是否存在,还是有其他方法?

0 投票
2 回答
139 浏览

c++ - MSVC 2013 错误?从映射容器中检索最后一个元素

假设我有一个std::map<std::string, std::vector<T>并且我想写一些代码

给定一些键,这将返回给我映射向量后面的元素。

所以我首先编写了一些代码,它将返回集合末尾的元素(在本例中为向量):

到目前为止,一切都很好。

接下来,我意识到我的函数实际执行逻辑将需要返回相同的类型ReturnLastObject,所以我编写了一些辅助结构,允许我使用类型特征来拉出函数指针的返回类型(预期该函数指针将指向ReturnLastObject<U>):

仍然做得很好:

最后,我编写了 main 函数来返回最后一个元素,或者抛出异常:

这似乎在GCCClang中都可以正常工作。

但是,当我尝试使用 MSVC 2013(更新 3)进行编译时,出现以下编译器错误:

错误 C2893:无法GetReturnType<unknown-type>::type &detail::GetLastAddedObject(const MapType::key_type &,const MapType &)
        使用以下模板参数专门化函数模板:
        MapType=std::map<std::string,std::vector<int,std::allocator<_Ty>>,std::less<_Kty>,std::allocator<std::pair<const _Kty,std::vector<_Ty,std::allocator<_Ty>>>>>

问题

我要问的是 MSVC 2013 中是否有一种解决方法可以完成同样的事情,或者我只是做错了什么?


编辑:MCVE

(也可以通过 GCC 和 Clang 链接找到)

0 投票
1 回答
2472 浏览

c++ - 在 Visual Studio 中编译 gcc 代码会导致错误 C3646:“__attribute__”:未知覆盖说明符

我收到以下错误:

错误 C3646:“__attribute__”:未知的覆盖说明符

代码:

完全错误:

1>c:\program files\indri\indri 5.9\include\indri\greedy_vector(52): 错误 C3646: '__attribute__': 未知覆盖说明符

附加信息:我正在尝试在 Visual Studio 项目中使用 indri.lib。