【发布时间】:2017-08-31 08:12:39
【问题描述】:
我目前正在使用 Arduino IDE 为我的 Teensy 编写一个库应用程序,到目前为止,它已经足够简单了。然而,我遇到了一些奇怪的编译错误,我似乎无法理解。我的库包括众所周知的 IRRemote 库,以便我创建几乎是一个包装库的内容,以便更具体地了解我需要与 IR Remote 库交互的方式。我遇到的问题是 IR Remote 库函数之一:
void sendRaw(const unsigned int buf[],unsigned int len, unsigned int);
虽然这看起来像是一个直接使用的函数,但我遇到的问题是函数的第一个参数。我已经尝试了各种方法来向这个函数参数传递一些东西,但无论我做什么,它都不会编译。目前我已经设置了一个变量
unsigned int bufferToSend[5] = {1,2,3,4,5}; // data is just for example purposes
当我尝试打电话时
sendRaw(bufferToSend, 5, 38); // Values are just for example purposes
我得到一个编译器错误
undefined reference to `IRsend::sendRaw(unsigned int const*, unsigned int, unsigned int)'
有趣的是,如果我直接从 Arduino .ino 文件中调用相同的函数,而不是通过我的库调用,代码编译并运行得非常好。我是否遗漏了一些明显的东西?
【问题讨论】:
-
您是否链接到定义函数的库?并且函数定义的源文件包含在库的构建中?
-
是的,你说得很好!在我的头文件中,我包含了库文件的头文件,但是我还需要在我的库中做些什么来包含它吗?
-
您需要实际link 与实际的library。头文件定义了接口,而不是应该在单独的库中的实现。您是否有以
lib开头并以.a结尾的文件?或者类似的东西?你如何建立图书馆? -
是的,你在这里是对的,我没有链接到二级库我现在觉得很愚蠢。我只需要锻炼如何在 Arduino 中链接它。我了解如何链接 C/C++ 中的库,我想我认为 Arduino 编译器会自动处理所有这些,但显然我错了哈哈!
-
原来这是一个常见问题;让一个自定义库建立在预先存在的库之上,看起来有关于如何做到这一点的文章。