【发布时间】:2013-09-06 08:38:18
【问题描述】:
我正在尝试编译和运行从 Unix 迁移到 Windows 的代码。我的代码是纯 C++,不使用 Qt 类。在 Unix 中没问题。
我还使用 Qt creator 作为 IDE,并使用 qmake.exe 和 -spec win32-g++ 进行编译。因为我的代码中有sse 指令,所以我必须包含emmintrin.h 标头。
我补充说:
QMAKE_FLAGS_RELEASE += -O3 -msse4.1 -mssse3 -msse3 -msse2 -msse
QMAKE_CXXFLAGS_RELEASE += -O3 -msse4.1 -mssse3 -msse3 -msse2 -msse
在.pro 文件中。 我已经能够毫无错误地编译我的代码。但在运行某些包含__m128 或类似的函数时会出现运行时错误。
当我打开emmintrin.h 时,我看到了:
#ifndef __SSE2__
# error "SSE2 instruction set not enabled"
#else
在#else之后没有定义。
我不知道如何在我的电脑上启用SSE。
平台:Windows Vista
系统类型:64位
处理器:intel(R) Core(TM) i5-2430M CPU @ 2.40Hz
有人知道解决办法吗?
提前致谢。
【问题讨论】:
-
您能否更具体地了解运行时错误?请复制并粘贴实际的错误消息。
-
不是运行时错误的问题。虽然访问冲突。主要问题是
__SSE__没有定义。我确定其余的代码。 -
是什么让你认为
__SSE__没有定义?您似乎对在标题中看到的内容感到困惑,这与此处无关。 -
是的,我想我很困惑。因为我在 Qt creator 中看到灰线,这意味着这些线不会被编译。此外,IDE 说
__m128不是类型名称。但是在调试模式下逐步运行代码时。 SSE 部分代码运行良好。我认为问题出在其他地方。它在执行_mm_load_ps()函数时崩溃。可能是由于输入分配错误。顺便说一句,我想知道我的机器是否支持该功能或......? -
这就是我要求您发布实际运行时错误消息的原因 - 这听起来像是典型的 SSE 未对齐数据问题。尝试正确对齐数据或使用
_mm_loadu_ps而不是_mm_load_ps。
标签: c++ mingw sse simd intrinsics