首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未知引用与xtensa-lx106-精灵-gcc?

未知引用与xtensa-lx106-精灵-gcc?
EN

Stack Overflow用户
提问于 2020-12-13 12:47:44
回答 1查看 565关注 0票数 0

我正在使用Arduino IDE,并计划稍后使用VSCode/Makefile解决方案。

如果所有的代码都在主草图中,我有一个编译和运行良好的项目。一旦分离了代码,链接步骤就会失败。

我把它归结为一个简单的演示:

什么起作用

草图文件

代码语言:javascript
复制
#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);
 }

什么失败了

草图文件

代码语言:javascript
复制
#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文件

代码语言:javascript
复制
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中声明,并定义了这里

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-14 14:46:56

阿迪诺氏吉特卜

根据https://github.com/esp8266/Arduino/issues/1283,Links2004声明:

随机是Arduino的一个API函数,它不工作于C。

答案似乎是将调用替换为对random的调用,改为调用rand。测试表明,在该演示源和实际源代码中,用random()randomSeed替换为randsrand-based修改将正确编译和运行。

修好了吗?

如果有人有一个更好的选项,允许从C代码中使用C++ random函数,我将很乐意用他们的方法替换我的“解决方案”。让我感到沮丧的是,C代码被Arduino伪装成C++编译,但是同一个源代码剪切成几个文件却没有,并且需要源代码本身调用不同的函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65275778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档