如使用scons生成Drivers的静态库,在引用该库后。如果在库的原文件中用到自动初始化的的代码,如INIT_BOARD_EXPORT,且该文件中的其它函数没有被显示的调用,就无法从静态库中链接到该文件的.o文件。 也就是说,虽然在静态库中某个文件的代码定义了rti_fn*段,但是该文件的其它代码没有被非库文件的代码显示的调用,那这个文件会被链接器忽略,导致部分代码没有被正常链接。如果被非库文件显示调用过,这个文件就会被正常链接。 请问有没有什么解决办法?有没有强制链接的一些措施?
查看更多
这是链接机制决定的,建议仅在 lib 里定义非 static 的初始化接口函数, 把 INIT_BOARD_EXPORT 放到主工程来。示例:
INIT_BOARD_EXPORT
lib.c
int init_xxxx() {}
main.c
extern int init_xxx();INIT_BOARD_EXPORT(init_xxx);
extern int init_xxx();
INIT_BOARD_EXPORT(init_xxx);
自动初始化用到__attribute__((used))属性 ,在生成静态库后,这个属性应该是丢弃掉了,就会导致无法链接。除了在工程中直接调用,好像也没有其它的好办法了。
__attribute__((used))
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部