您能帮我解决Eigen中这个令人发指的错误吗? “ bench / BenchTimer.h(31)语法错误:'volatile'”
违规代码: bench / BenchTimer.h
static void escape(void *p) {
asm volatile("" : : "g"(p) : "memory");
}
static void clobber() {
asm volatile("" : : : "memory");
}
我的代码: tests.cpp
#include <iostream>
#include <bench/BenchTimer.h>
int main() {
Eigen::BenchTimer t;
t.reset(); t.start();
//TestEigenSolveSpeed();
t.stop();
std::cout << t.value() << std::endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.11)
set(LEVELING_NAME test-eigen)
project(${LEVELING_NAME})
add_executable(${LEVELING_NAME} tests.cpp )
target_include_directories(${LEVELING_NAME} PUBLIC
${CMAKE_CURRENT_LIST_DIR}/deps/eigen-master
)
文件夹结构:
/
|
-- CMakeLists.txt
-- tests.cpp
-- deps
|
-- eigen-master
使用以下方法创建解决方案:
cmake . -DCMAKE_GENERATOR_PLATFORM=x64 -B build
在Windows中,在VS2017中
具有最新存储库版本:主版本3.3.3
以下是三个文件以及一个zip中的存储库,以便于复制:https://www.dropbox.com/s/avpfbabo4l9ti5h/test-eigen-error-volatile.zip?dl=0
答案 0 :(得分:0)
正如ggael所提到的,解决方案是注释两条有问题的代码行:
static void escape(void *p) {
//asm volatile("" : : "g"(p) : "memory");
}
static void clobber() {
//asm volatile("" : : : "memory");
}
MSVS2017似乎不支持/接受此“ volatile”
然而,它已经由ggael在最新版本的存储库中修复:)