我正在使用Arduino IDE,并计划稍后使用VSCode/Makefile解决方案。
如果所有的代码都在主草图中,我有一个编译和运行良好的项目。一旦分离了代码,链接步骤就会失败。
我把它归结为一个简单的演示:
什么起作用
草图文件
#ifdef __cplusplus
extern "C" {
#endif
void methodCall();
#ifdef __cplusplus
}
#endif
void setup() {
// put your setup code here, to run once:
}
void loop() {
methodCall();
}
void methodCall() {
random(0,1);
}什么失败了
草图文件
#ifdef __cplusplus
extern "C" {
#endif
void methodCall();
#ifdef __cplusplus
}
#endif
void setup() {
// put your setup code here, to run once:
}
void loop() {
methodCall();
}通过Sketch>'Add File‘添加到Arduino IDE草图中的Methods.c文件
void methodCall() {
random(0,1);
}Platform.txt修饰?
一些问题建议将-lstd++添加到ESP8266文件夹的platform.txt文件中的compiler.c.elf.libs行中,但它似乎不会对我产生任何结果,而且前面的build.stdcpp_lib=-lstdc++行似乎会处理这个问题。
关于标头的注意事项
如果源文件将方法声明外部化在头文件#included中,则错误是相同的。random函数在and 8266/Arduino.h中声明,并定义了这里。
我做错了什么?
发布于 2020-12-14 14:46:56
阿迪诺氏吉特卜
根据https://github.com/esp8266/Arduino/issues/1283,Links2004声明:
随机是Arduino的一个API函数,它不工作于C。
答案似乎是将调用替换为对random的调用,改为调用rand。测试表明,在该演示源和实际源代码中,用random()和randomSeed替换为rand和srand-based修改将正确编译和运行。
修好了吗?
如果有人有一个更好的选项,允许从C代码中使用C++ random函数,我将很乐意用他们的方法替换我的“解决方案”。让我感到沮丧的是,C代码被Arduino伪装成C++编译,但是同一个源代码剪切成几个文件却没有,并且需要源代码本身调用不同的函数。
https://stackoverflow.com/questions/65275778
复制相似问题