////////////////sw_delay.cpp////////////////
#include "sw_delay.h"
void sw_delay(uint32_t n)
while (n != 0U)
////////////////sw_delay.h////////////////
#include <stdint.h>
#if defined(__cplusplus)
extern "C" {
#endif
void sw_delay(uint32_t n);
#if defined(__cplusplus)
#endif
现在开始重新Build加了sw_delay.cpp文件的工程,得到如下错误,这个错误就是找不到sw_delay()函数定义,因为sw_delay()函数代码被放在.cpp文件中(如果是放在.c文件中,编译一切正常),翻看全部编译log,并没有找到关于sw_delay.cpp文件的编译信息,看起来就像是.cpp文件被自动忽略了。
四、让MCUXpresso IDE正确编译C++文件
4.1 激活C++编译器
在第二节里我们分析过Build信息,对于.c文件的编译都是通过激活MCU C Compiler来实现的,现在.cpp文件被自动忽略了,估计是没有使能C++编译器,那我们来开启一下C++编译器,在.project文件中增加一句代码即可,具体如下:
那句开启C++编译器的代码是立刻生效的,不需要关掉重开IDE工程。现在让我们再次Build工程,此时编译log里已经有了sw_delay.cpp的身影,似乎大功告成了。
4.2 为C++链接器指明链接文件
事情没有那么简单,虽然.cpp文件能够编译了,但工程最终Build发生了更多错误,log里信息上来看是链接阶段找不到代码里调用的一些c标准库函数以及链接文件里定义的一些段名和stack名等,看起来是链接文件有问题。
打开工程属性设置,在C/C++ Build的Settings下面可以看到激活C++编译器后,新增了MCU C++ Compiler选项,并且MCU C Linker选项升级成了MCU C++ Linker选项,但是MCU C++ Linker选项里没有指明Linker Script(本来MCU C Linker选项里有链接文件),这时候我们只要勾选Manage linker script,便可以设好链接文件。
Apply属性设置之后,再次重编工程,终于看到0 errors, 0 warnings了,为了确保万一,可以在map文件里查看是否有sw_delay()函数,存在即说明.cpp文件确实被正常编译链接了。
4.3 为C++编译器设置引用路径和宏(可选)
最后还需要提醒一下,如果cpp文件也依赖一些路径和宏,需要把这些路径和宏填到MCU C++ Compiler选项对应设置里,默认路径和宏定义都是空的。
至此,MCUXpresso IDE下添加C++源文件进SDK工程编译的方法痞子衡便介绍完毕了,掌声在哪里~~~
文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。
衡杰(痞子衡),目前就职于某全球顶级半导体原厂MCU系统部门,担任高级嵌入式系统应用工程师。
专栏内所有文章的转载请注明出处:http://www.cnblogs.com/henjay724/
与痞子衡进一步交流或咨询业务合作请发邮件至 [email protected]
可以关注痞子衡的Github主页 https://github.com/JayHeng,有很多好玩的嵌入式项目。
关于专栏文章有任何疑问请直接在博客下面留言,痞子衡会及时回复免费(划重点)答疑。
痞子衡邮箱已被私信挤爆,技术问题不推荐私信,坚持私信请先扫码付款(5元起步)再发。