Windows上的Intel C ++编译器发生灾难性错误:无法打开源文件“ bits / unique_ptr.h”

时间:2019-03-20 23:42:57

标签: c++ windows icc

我正在尝试使用Intel C ++编译器19.0在Windows上编译我的代码。我正在使用以下电话:

icl /Qstd=c++11 c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths\src\SystemComponents\Utility\Utility.cpp

即使此代码可在Linux系统上编译,但当我尝试在Windows上编译时,也会出现以下错误:

c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths>icl /Qstd=c++11 c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths\src\SystemComponents\Utility\Utility.cpp
Intel(R) C++ Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.0.3.203 Build 20190206
Copyright (C) 1985-2019 Intel Corporation.  All rights reserved.

Utility.cpp
c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths\src\SystemComponents\Utility\Utility.h(10): catastrophic error: cannot open source file "bits/unique_ptr.h"
  #include <bits/unique_ptr.h>
                              ^

compilation aborted for c:\Users\Bernardo\Downloads\HW1_6200\ProjectAmina\WaterPaths\src\SystemComponents\Utility\Utility.cpp (code 4)

由于某种原因,我的标准库似乎没有智能指针。我想念什么?

2 个答案:

答案 0 :(得分:6)

标头<bits/unique_ptr.h>是GCC标准库的内部实现细节。它是构成<memory>的实现的头文件之一。

因此,看来您的代码正在尝试包含GCC标准库中的标头,如果您使用GCC标准库进行编译,则可以正常工作,但使用其他标准库时则不能。这应该是显而易见的。您不能包含其他实现中不存在的标头。

用户代码不应从不尝试直接包含<bits/unique_ptr.h>,因为在C ++标准库的其他实现中甚至不存在。要包含的正确标题是<memory>。该代码需要修复,以停止尝试包含特定实现的内部实现细节。

<bits/unique_ptr.h>中甚至有一条评论说:

/** @file bits/unique_ptr.h
 *  This is an internal header file, included by other library headers.
 *  Do not attempt to use it directly. @headername{memory}
 */

答案 1 :(得分:3)

std::unique_ptr的正确头文件是

#include <memory>