-Werror=’ argument ‘-Werror=non-virtual-dtor’ is not valid for C In file included from /home/user/opencv-3.4.7/modules/core/test/test_precomp.hpp:12:0, from /home/user/opencv-3.4.7/build/modules/core/opencv_test_core_pch_dephelp.cxx:1: /home/user/opencv-3.4.7/modules/core/include/opencv2/core/private.hpp:66:12: fatal error: Eigen/Core: 没有那个文件或目录 # include <Eigen/Core> ^~~~~~~~~~~~
时间: 2023-08-06 19:04:46 浏览: 76
这个错误表明你在编译C代码时使用了一个无效的编译器选项。"-Werror=non-virtual-dtor" 是一个用于C++的编译器选项,而不适用于C语言。对于C语言,你应该使用 "-Werror" 选项来将所有警告视为错误。
另外,关于缺少 "Eigen/Core" 文件或目录的错误,这意味着你的编译环境缺少了Eigen库。Eigen是一个用于线性代数运算的C++模板库,如果你的代码中使用了Eigen库,并且编译环境中没有安装该库,那么你需要安装Eigen库或者检查你的路径设置是否正确。
希望这些信息可以帮助到你解决问题。如果还有其他问题,请随时提问。
相关问题
cc1: warning: ‘-werror=’ argument ‘-werror=non-virtual-dtor’ is not valid for c
### 回答1:
警告:\ xe2 \ x80 \ x98-werror = \ xe2 \ x80 \ x99参数\ xe2 \ x80 \ x98-werror = non-virtual-dtor \ xe2 \ x80 \ x99不适用于c.
### 回答2:
在C语言中,-werror=non-virtual-dtor不是一个有效的选项。这是因为C语言没有虚拟析构函数这个概念,因此这个选项是多余的。虚拟析构函数只在C++中有用。
警告出现的原因可能是因为在编译时使用了一些C++选项,而源代码中存在一些不兼容的内容。这些选项可能在编译器中默认开启,因此可能会出现警告。
解决这个问题的方法是检查编译选项并相应地更改它们。如果是在使用类似于Makefile的简单编译器命令行工具中编译代码,则需要手动更改命令行选项。
在Makefile中,可以将编译器命令行中的“-Werror=non-virtual-dtor”选项删除,或者简单地将其替换为“-Wno-non-virtual-dtor”选项。
总之,这个警告是因为选项不适用于C语言。如果遇到这种警告,需要检查编译选项并相应地更改它们,以使其适用于C语言。
### 回答3:
在C语言中,不存在虚析构函数的概念,因此使用“-werror=non-virtual-dtor”参数来强制编译器在编译代码时将没有虚析构函数的类作为警告或错误报告是无效的。
虚析构函数是用于在删除已分配的对象时,确保正确处理多态类的析构函数。在C++中,虚析构函数是很常见的,但在C语言中并不支持虚析构函数。因此,C语言编译器会忽略“-werror=non-virtual-dtor”参数,并将其视为无效参数。
此外,C语言是一种不支持面向对象程序设计的编程语言,因此它不支持类和对象的概念。相反,C语言更注重可移植性和对底层硬件的直接控制。因此,在C语言中使用虚析构函数的需求也就相应减少了。
总结来说,在C语言中不存在虚析构函数的概念,因此在编译代码时使用“-werror=non-virtual-dtor”参数是没有意义的。如果想要使用虚析构函数,应该采用面向对象的编程语言,比如C++。
-Werror=missing-braces 加在哪里
"-Werror=missing-braces" 是 GCC 编译器的一个选项,用于将缺少大括号的初始化视为错误而非警告。这个选项可以帮助你在编译过程中捕捉到可能的错误,并确保正确地初始化结构体或数组。
你可以将"-Werror=missing-braces"选项添加到编译命令中的编译选项部分。具体来说,你可以在使用 GCC 编译器进行编译时的命令行中加入该选项。
例如,在使用 GCC 编译器编译一个 C 文件时,可以这样添加该选项:
```shell
gcc -Werror=missing-braces file.c -o output
```
这会将"-Werror=missing-braces"选项传递给 GCC 编译器,告诉它将缺少大括号的初始化视为错误。
请注意,具体的操作方法取决于你所使用的编译器和开发环境。如果你使用的是其他编译器或 IDE,请查阅相关文档或在社区中寻求帮助,以了解如何在你的开发环境中添加该选项。