bench / BenchTimer.h(31)语法错误:“ volatile”

时间:2019-01-23 19:59:15

标签: c++ eigen

您能帮我解决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

1 个答案:

答案 0 :(得分:0)

正如ggael所提到的,解决方案是注释两条有问题的代码行:

static void escape(void *p) {
  //asm volatile("" : : "g"(p) : "memory");
}

static void clobber() {
  //asm volatile("" : : : "memory");
}

MSVS2017似乎不支持/接受此“ volatile”

然而,它已经由ggael在最新版本的存储库中修复:)