尝试在 ldebug.c 中包含 httpclient.h 会导致编译期间出错

Posted

技术标签:

【中文标题】尝试在 ldebug.c 中包含 httpclient.h 会导致编译期间出错【英文标题】:Trying to include httpclient.h inside ldebug.c is causing an error during compilation 【发布时间】:2019-05-30 08:38:09 【问题描述】:

我的目标是通过包含 httpclient 在 ldebug.c 中执行 http post 请求。它在 dbg_printf.c 中有效,但在 ldebug.c 中出现编译错误。

In file included from ../ldebug.c:28:0:
../../http/httpclient.h:69:24: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'http_request'
 void ICACHE_FLASH_ATTR http_request(const char * url, const char * method, const char * headers, const char * post_data, http_callback_t callback_handle, int redirect_follow_count);

我可以通过其他方式进行发布请求吗?

【问题讨论】:

好像没有定义ICACHE_FLASH_ATTR。也许您还需要包含其他一些头文件。 @lhf 我在 dbg_printf 中包含了 httpclient.h 并且没有收到任何错误。为什么链接器会突然不知道 ICACHE_FLASH_ATTR 是什么意思? 不是链接器错误,而是编译器错误。它在 ldebug.c 中不起作用,因为符号 ICACHE_FLASH_ATTR 未在文件包含的头文件中定义。 【参考方案1】:

ICACHE_FLASH_ATTR是文件c_types.h中定义的宏

没有定义的原因有两个。

首先,ldebug.c 可能不包含 c_types.h 或包含 #includes c_types.h 的文件。这很容易修复 - 编辑 ldebug.c 并添加

#include <c_types.h>

#include &lt;httpclient.h&gt;之前

另一种可能性是编译 ldebug.c 时未定义符号 ICACHE_FLASH。如果ICACHE_FLASH 是#define'd,文件c_types.h 只定义ICACHE_FLASH_ATTR。如果第一个修复不起作用,则需要确保在编译 ldebug.c 时#define ICACHE_FLASH

最简单的方法是添加

#define ICACHE_FLASH 1

作为 ldebug.c 的第一行

或者您可以确保在您的开发环境中将-DICACHE_FLASH=1 设置为编译器标志。更改 ldebug.c 几乎可以肯定是更简单的方法。

【讨论】:

感谢您的提示!最终的工作是将整个ICACHE_FLASH 定义从c_types.h 复制到ldebug.c

以上是关于尝试在 ldebug.c 中包含 httpclient.h 会导致编译期间出错的主要内容,如果未能解决你的问题,请参考以下文章

我的逻辑有啥问题?尝试计算文件中包含特定字符的单词数量

尝试使用 sed 命令在 test.txt 文件中包含此 var 以删除双引号

在 Camunda 中包含外部插件

如何在 rake 任务中包含模块类?

尝试在 Visual Studio 2012 中包含 OpenSSL 标头:错误 LNK2019:未解析的外部符号

如何在 CodeIgniter 中包含外部库?