在使用 intel oneAPI DPC++/C++ 编译器时,刚被困在用 Eigen C++ 编译一个简单的 C++ 程序:该示例包含两个 .cpp 文件(main.cpp 和 Preprocessing.cpp)和一个包含文件(struct_INFO.h)。
我不知道为什么编译器会出现如图所示的错误。 来自英特尔编译器的错误消息:
duplicate symbol: bool const std::_Is_integral<bool>
duplicate symbol: bool const std::_Is_integral<char>
duplicate symbol: bool const std::_Is_integral<signed char>
duplicate symbol: bool const std::_Is_integral<unsigned char>
duplicate symbol: bool const std::_Is_integral<wchar_t>
duplicate symbol: bool const std::_Is_integral<char16_t>
duplicate symbol: bool const std::_Is_integral<char32_t>
...所有的错误都是相似的,所以我只展示其中的一些。
在我的子例程 Preprocessing.cpp 中,似乎我既不能包含 Eigen 头文件 (<Eigen/Core>),也不能包含包含 Eigen 头文件的头文件 struct_INFO.h。
我知道解决问题的唯一方法是将两个 .cpp 文件合并为一个。
但是,这种方法有点麻烦,只要我需要使用 Eigen 变量,我就需要将所有子例程放在一个文件中。
有谁知道如何解决这个问题?谢谢你。
主.cpp:
#include "struct_INFO.h" #include <Eigen/Core> int Preprocessing(struct_INFO& struct_INFO_obj); int main(int* argc, char** argv) { struct_INFO struct_INFO_obj; Preprocessing(struct_INFO_obj); return 0; }
预处理.cpp
#include "struct_INFO.h" int Preprocessing(struct_INFO& struct_INFO_obj) { return 1; }
struct_INFO.h
#include <Eigen/Core> class struct_INFO { public: Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> Matrix; };