我正在尝试使用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,没有微控制器