问题标签 [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.
c++ - 为什么当函数参数是对临时对象的常量引用或按值复制的临时对象时,MSVC 优化会破坏 SSE 代码?
昨天遇到这个问题,我将尝试给出明确而简单的示例,这些示例对我来说失败了MSVC12 (VS2013, 120)和MSVC14 (VS2015, 140)。一切都是隐含的 /arch:SSE+ x64。
出于说明目的,我将使用定义的宏 _MM_TRANSPOSE4_PS 将问题简化为一个简单的矩阵转置示例。这个是根据 shuffle 实现的,而不是移动 L/H 8 字节块。
这matrix4x4
只是一个包含四个__m128
成员的 POD 结构,所有内容都整齐地排列在 16 字节边界上,尽管它有些隐含:
所有这些都在 /O1、/O2 和 /Ox 上失败:
奇怪的是,这有效:
基于指针的传输也是如此,这是合乎逻辑的,因为底层机制是相同的。C++11 规范的相关部分是§12.2/5:
第二个上下文是引用绑定到临时的。引用绑定到的临时对象或作为临时对象绑定的子对象的完整对象的临时对象将在引用的生命周期内持续存在,除非下面指定。临时绑定到构造函数的 ctor-initializer (§12.6.2 [class.base.init]) 中的引用成员将持续存在,直到构造函数退出。临时绑定到函数调用(第 5.2.2 节 [expr.call])中的引用参数会一直持续到包含调用的完整表达式完成为止。
这意味着它应该一直存在,直到调用环境超出范围,这在函数返回之后很远。那么,什么给了?在所有其他情况下,变量会“优化掉”,但以下情况除外:
虽然解决方案很明显,但防止用户像其他一些库一样使用基于指针的传输直接传递临时变量,我希望实际上让它更优雅一点,而不会阻塞视图。
c++ - GCC默认导出所有符号与MSVC默认不导出任何东西之间的设计原理是什么?
C++ 编译器 GCC 和 MSVC 之间的许多关键区别之一是,首先默认导出共享库中的所有符号,而 MSVC 不导出任何内容。
一些含义是,在 MSVC 中,您必须导出显式实例化模板类。
虽然我已经接受这是生活中的事实,但我想知道每种方法的设计含义、权衡、从编译器设计者的角度等是什么?
msvc12 - 如何修复 Visual Studio 2013 中的“错误 MSB4018:“VCMessage”任务意外失败
这就是我所看到的:
并且 google 和 SO 搜索中列出的解决方案无法提供(删除尾部斜杠、恢复为默认值$(OutDir)
或$(TargetDir)
路径等)
语境
这涉及从 MSVC2012 迁移的几个项目。从相同的 MSVC2012 环境迁移的具有相同项目/解决方案布局的其他项目没有眨眼,而有些项目出现此错误,这会阻止任何类型的成功编译/构建结果。
python - Where is my Py_NoneStruct symbol (python, boost.python)?
I'm trying to compile a simple main.cpp
which just includes boost/python.hpp
.
Like the following:
I'm using MSVC command line tools from my git-bash
shell. I know that cl.exe
need some environment variable that can be found in vcvars32.bat
.
Here is how I'm compiling/linking my main.cpp
:
When I'm doing this, this ends up with a linking error:
So, I decide to check my python27.lib
file to see if the missing symbol is here:
NOTHING!!
But, the symbol is in my libpython27.a
:
I did install python
using the .msi
installer (64bits). I built boost.python
with the good address-model=64
. Here is my CLI for building boost.python
:
Did I miss something? Is the python
installer buggy? (I've found an issue about something similar)...
To be honest, I've tried many things, also I'm not really used to Windows development environment, so maybe I've missed something!
Thanks!
windows - 使用 msvc 为 Windows 构建 Qt - Qmakespec 错误
我正在尝试使用 Visual Studio 2013 静态构建 Qt
为此,我按照官方网站提供的说明进行操作
1) 下载、安装 ActivePerl 5.20 并将其添加到 PATH。
2) qt-everywhere-enterprise-src-5.3.1 的存档下载并解压到 C:\Qt\Entreprise_2
3) 我打开 msvc 2013 命令提示符,并将目录更改为:C:\Qt\Entreprise_2\qt-everywhere-enterprise-src-5.3.1
4) 从这里,我向路径添加 2 个新元素:
SET PATH=C:\Qt\Entreprise_2\qt-everywhere-enterprise-src-5.3.1\qtbase\bin;C:\Qt\Entreprise_2\qt-everywhere-enterprise-src-5.3.1\gnuwin32\bin;%小路%
5)我为了使用msvc定义了QMAKESPEC:SET QMAKESPEC=win32-msvc2013。
6)最后,我启动编译:configure -commercial -nomake tests -nomake examples -debug -static
如果我跳过第 5 部分),我会收到
我收到答案:“QMAKESPEC 环境变量设置为“win32-msvc2013”,这不是受支持的平台”
如果我跳过第 6 步,我会改为:“无法从环境中检测平台。使用 -platform commandlineargument 或设置 QMAKESPEC 环境变量并再次运行配置”
但是,根据 Qt 支持中心:
1)“win32-msvc2013”是与 Visual Studio 一起使用的正确 QMAKESPEC
2)如果我们使用 Visual Studio 命令提示符(就像我一样)而不是正常的,设置 QMAKESPEC 无论如何都是可选的,因为 Visual Studio 应该在开始时设置正确的参数
那么,有没有人知道我如何解决这些错误?
顺便说一句,有谁知道 Qmakespec 对应于“支持的平台”的定义是什么?
c++ - MSVC 调试器告诉我我的向量的位置比指定的多
我已经声明了以下内容:
但是,当我打开 MSVC 调试器时,它显示以下内容:
这就是我向向量添加值的方式:
这是正常的吗?我可以忽略这个吗?或者这是一个问题?
完整代码(程序还没有准备好):
c++ - Microsoft Visual Studio 2013 中的 libxml2 链接器错误
我正在将一些在 Linux 下使用 cmake 和 gcc 编译的 c++ 代码移植到更大的 Windows 项目中。我们使用的是Microsoft Visual Studio 2013,该项目是一个简单的命令行工具,内置发布模式,x64。链接 libxml2 和 libxslt 时,我收到一堆链接器错误。首先我尝试下载预构建的二进制文件,但是当这不起作用时,我尝试自己构建 libxml2 和 libxslt。我下载了 libxml2-2.7.8 的源代码,并像这样构建它:
这很成功,产生了 libxml2.lib 和 libxml2_a.lib。然后,我将这些库的路径添加到我的项目设置中的链接器路径中,并将库名称添加到链接器输入的附加依赖项中。我对 libxslt 遵循了这些相同的说明。在 MSVC 中构建项目时,出现以下错误:
我不知道为什么会发生这些链接器错误。库在路径中,并明确链接。如果我将库移到一边并尝试构建,我会收到一条错误消息,告诉我找不到文件。所以我知道它可以看到文件,但由于某种原因它无法从中读取符号。我尝试使用所有可能的参数组合来构建库,但没有成功。我尝试链接 libxml2_a.lib 和 libxml2.lib。我成功地链接到类似构建的 boost 库。为什么我会收到这些链接器错误?
c++ - C++,实现函数“int next(std::string param)”时出现奇怪的编译器错误
我被下面的代码严重咬伤了,我在上面浪费了很多小时的宝贵时间。
这会产生以下编译器错误(在 Visual Studio 2013 上):
后来我发现,如果我将函数名称从更改为其他名称next()
,一切都很好。对我来说,这表明存在名称冲突,特别是 name next
。我觉得这很奇怪,因为我没有使用类似using namespace std
. 据我所知,next
不是内置的 C++ 关键字(是吗?)。我抬头看了看next
这里,但std::next
正如我所说,我没有using namespace std
。那么这场冲突是如何发生的呢?我如何防止将来发生类似的事情?还有哪些其他名称可能会导致这样的冲突?
c++ - C2470 错误 Visual Studio 2012 和 Qt 4.8.6
我正在为我的研发需求制作小型库。为此,我使用 Qt 4.8.6 和 Visual Stuido 2012。
这是我的.pro
文件
这是.h
我班级的文件
.cpp
文件还包含所有声明的方法和实现。
但是当我尝试构建这个库时,我遇到了错误:
mymath.h(31): error C2470: AkimaInterpolator:: 看起来像函数定义,但没有参数列表;跳过明显的身体。
我检查了编译器标志,似乎MYMATHIMPL
已设置。
我究竟做错了什么?为什么要屏蔽:
没有按预期工作?
boost - 2>LINK : 致命错误 LNK1104: 无法打开文件 'libboost_filesystem-vc120-mt-sgd-1_58.lib'
难怪...\boost_1_58_0\stage\lib
. 我怎样才能得到一个?我只有:
在那里。试图用各种选项编译 boost 并最终附加 到它(来自Linker error LNK1104 with 'libboost_filesystem-vc100-mt-s-1_49.lib'--build-type=complete
的“穷人”解决方案)以获得:
我正在导入的项目的自述文件中建议的命令行 - 仍然没有乐趣。这是一个 CMake 项目,我为构建 MSVS 解决方案付出了一些努力。
注意:仔细查看 CMake gui 时,我的问题得到了解决:
我意识到这是没有构建的调试配置,当我右键单击“解决方案”>配置管理器>更改为发布构建时,果然没问题。问题仍然存在 - 我如何获得那些 libboost_filesystem-vc120-mt- sgd -1_58.lib 构建?