出于公司需求,要将RT-thread操作系统封装成lib库,但是发现有些条件编译语句在封装后会出现失效的情况,例如
#ifdef RT_USING_COMPONENTS_INIT rt_components_board_init();#endif
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
在封装后,上述语句就会失效,调试时直接到了自己的main函数而不是$Sub$$main,请问这是为什么呢?
查看更多
封装成lib, 之前好像听熊大讲过,确实有这个问题。很细节的原理不是很明白,大致是因为和将函数指针放置在某一个段内有关,这个是链接的时候,会动态新增减少的
条件编译的处理是在预处理的时候发生的,生成lib库是在 预处理-》编译-》汇编-》AS打包完成的;理论上,只要你在预处理的时候,这个RT_USING_COMPONENTS_INIT宏开关四被定义的,最终打出来的lib肯定有rt_components_board_init这行函数的调用。
RT_USING_COMPONENTS_INIT
rt_components_board_init
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部