gpt4 book ai didi

c++ - 如何修复 arduino ide 中的 "undefined reference to:",尝试使用 googletest

转载 作者:行者123 更新时间:2023-11-30 04:46:37 30 4
gpt4 key购买 nike

我正在尝试使用 googletest 库来测试 arduino ide 中的代码,但我不断收到如下错误

In function __static_initialization_and_destruction_0' undefined reference to `std::ios_base::Init::Init()'

这个错误还有50行,包括

undefined reference to testing::Test::SetUp()' undefined reference to testing::Test::TearDown()

由于连基本的测试功能都失败了,我假设我在放置库文件的位置上犯了错误,或者我可能只是没有包含正确的文件。

目前我只包括 gtest/gtest.h,因为这是我在其他示例中看到的所有代码才能正常工作。

我已经使用 cmake 和 make 构建了 googletest 库,并将其包含在项目中。

有人知道我可以做些什么来解决这个问题吗?

最佳答案

您无法在 Arduino IDE 中编译 googletest。主要是因为 Arduino IDE 使用的编译器旨在生成(对于普通 arduino)AVR 二进制文件而不是 x86/x86-64 二进制文件。这些 AVR 二进制文件不能在普通 PC 上运行,只能在嵌入式平台上运行。因为在嵌入式平台上,普通的标准文本 IO 流不可用,所以 arduino IDE 不包括普通 PC 上用于终端使用的标准 IO。 (在 unix 上也称为管道 0 1 2)。

I have built the googletest library using cmake and make, and included it within the project.

这是行不通的,这是正确的。如果您使用 cmake/make 编译 googletest,您可能正在构建一个 x86x86-64 二进制文件,然后将其包含在 arduino IDE 中。然后,arduino IDE 编译器将尝试将 AVR 二进制链接到 x86/x86-64 库。这是行不通的。

如果您确实想使用 googletest 测试您的 Arduino 代码,我建议您以这样一种方式设计您的软件,即从您的业务逻辑中删除依赖于硬件的逻辑。然后可以通过使用可以在普通 pc 上运行的测试代码编译('普通')x86x86-64 二进制文件来对业务逻辑进行单元测试。这将涉及模拟代码中使用的硬件接口(interface)。这个构建基础设施可以很容易地在您的 arduino 项目的相同结构中设置,测试将只涉及构建一个测试二进制文件并运行它。

关于c++ - 如何修复 arduino ide 中的 "undefined reference to:",尝试使用 googletest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56646076/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com