如何在arduino ide中修复"undefined reference to:",尝试使用googletest
How to fix "undefined reference to:" in arduino ide, trying to use googletest
我正在尝试使用googletest库来测试arduino ide中的代码,但不断收到诸如
在函数中__static_initialization_and_destruction_0未定义 引用 'std::ios_base::Init::Init()'
此错误还有 50 行,包括
对测试的未定义引用::测试::SetUp()' 未定义的引用 测试::测试::拆解()
由于即使是基本的测试功能也失败了,我认为我在放置库文件的位置上犯了一个错误,或者我只是没有包含正确的文件。
目前我只包括gtest/gtest.h
,因为这是我在其他示例中看到的全部内容,以便代码正常工作。
我已经使用cmake和make构建了googletest库,并将其包含在项目中。
有没有人知道我能做些什么来解决这个问题?
您无法在 Arduino IDE 中编译 googletest。主要是因为Arduino IDE使用的编译器旨在生成(对于普通arduinos)AVR
二进制文件,而不是x86
/x86-64
二进制文件。这些AVR
二进制文件不能在普通PC上运行,只能在嵌入式平台上运行。由于在嵌入式平台上,正常的标准文本IO流不可用,因此arduino IDE不包括普通PC上用于终端使用的标准IO。(又名 Unix 上的管道 0 1 2)。
我已经使用cmake和make构建了googletest库,并将其包含在项目中。
这是行不通的。如果你用cmake/make编译googletest,你可能正在构建一个x86
或x86-64
二进制文件,然后你把它包含在arduino IDE中。然后,arduino IDE编译器将尝试将AVR
二进制文件链接到x86
/x86-64
库。这是行不通的。
我建议您以这样一种方式设计您的软件,如果您确实想使用 googletest 测试您的 Arduino 代码,那么从您的业务逻辑中删除硬件相关逻辑。然后,可以通过编译("正常")x86
或x86-64
二进制文件来对业务逻辑进行单元测试,测试代码可以在普通PC上运行。这将涉及模拟代码中使用的硬件接口。这个构建基础设施可以很容易地在你的arduino项目的相同结构中设置,测试只涉及构建一个测试二进制文件并运行它。
Google 测试已在各种平台上使用:
- Linux目录
- Mac OS X
- 窗户
- 天鹅座
- 明广
- 视窗移动版
- 塞班
- 平台IO
没有Arduino,没有微控制器
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- vector<vector<double>> to mxArray using memcpy
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 当覆盖存在时调用基本虚拟"binded to object"函数
- OpenGL VBO Indexing ( How to compute Index Array)
- 为什么我会" void value not ignored as it ought to be"?
- 如何在arduino ide中修复"undefined reference to:",尝试使用googletest