-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 17:04:46 浏览: 364
这个错误表明你在编译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++。
FAILED: CMakeFiles/cartographer.transform.timestamped_transform_test.dir/cartographer/transform/timestamped_transform_test.cc.o /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_IOSTREAMS_DYN_LINK -DGFLAGS_IS_A_DLL=0 -I../cartographer -I. -I../ -isystem /usr/include/eigen3 -isystem /usr/include/lua5.2 -O3 -DNDEBUG -pthread -fPIC -Wall -Wpedantic -Werror=format-security -Werror=missing-braces -Werror=reorder -Werror=return-type -Werror=switch -Werror=uninitialized -O3 -DNDEBUG -pthread -fPIC -Wall -Wpedantic -Werror=format-security -Werror=missing-braces -Werror=reorder -Werror=return-type -Werror=switch -Werror=uninitialized -O3 -DNDEBUG -std=gnu++11 -MD -MT CMakeFiles/cartographer.transform.timestamped_transform_test.dir/cartographer/transform/timestamped_transform_test.cc.o -MF CMakeFiles/cartographer.transform.timestamped_transform_test.dir/cartographer/transform/timestamped_transform_test.cc.o.d -o CMakeFiles/cartographer.transform.timestamped_transform_test.dir/cartographer/transform/timestamped_transform_test.cc.o -c ../cartographer/transform/timestamped_transform_test.cc In file included from ../cartographer/transform/timestamped_transform_test.cc:17: ../cartographer/transform/timestamped_transform.h:21:10: fatal error: cartographer/transform/proto/timestamped_transform.pb.h: No such file or directory 21 | #include "cartographer/transform/proto/timestamped_transform.pb.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. [44/380] Building CXX object CMakeFiles/cartographer.sensor.internal.voxel_filter_test.dir/cartographer/sensor/internal/voxel_filter_test.cc.o
根据你提供的错误信息,看起来是在编译过程中发生了一个错误。错误信息显示,在 `timestamped_transform_test.cc` 文件中的第17行引入的头文件 `cartographer/transform/timestamped_transform.h` 中,包含的另一个头文件 `cartographer/transform/proto/timestamped_transform.pb.h` 找不到。这可能是由于缺少相关的依赖或者路径配置错误导致的。
解决这个问题的方法是确保你已经正确安装了所需的依赖,并且在编译过程中正确设置了头文件搜索路径。你可以检查一下你的编译环境是否配置正确,特别是与 Cartographer 相关的依赖和头文件路径。另外,还可以确认一下是否有缺少其他必需的文件或库。
如果问题仍然存在,请提供更多关于你的编译环境和相关配置的信息,以便我能够更好地帮助你解决问题。
阅读全文