完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教下,在编译时,遇到几个问题:
1.同一个工程中,在不同的C文件写相同的函数,编译时不报错,函数生效随机; 2.使用__attribute__((weak)) __weak_symbol 无效。 请教下,__attribute__((weak)) __weak_symbol 怎么才能起作用。 |
|
相关推荐
1个回答
|
|
在回答您的问题之前,我们先了解一下相关概念:
1. `__attribute__((weak))` 是 GCC 编译器的一个扩展,用于声明一个符号(变量或函数)为弱符号。弱符号允许在多个编译单元(例如 C 文件)中定义相同的符号,而在链接时只保留一个定义。 2. `__weak_symbol` 是一个宏,用于检查一个符号是否被声明为弱符号。 现在我们来分析您遇到的问题: 问题1:同一个工程中,在不同的C文件写相同的函数,编译时不报错,函数生效随机。 这个问题可能是因为编译器在处理弱符号时,没有按照预期的方式进行。在这种情况下,您可以尝试以下方法: 1. 确保所有函数都使用 `__attribute__((weak))` 声明。 2. 确保所有函数的声明和定义都是一致的,包括函数名、参数列表和返回类型。 3. 在链接时,确保没有其他库或模块引入了相同的函数定义。 问题2:使用 `__attribute__((weak))` 和 `__weak_symbol` 无效。 这个问题可能是由于以下原因导致的: 1. 您的编译器不支持 GCC 扩展,或者没有正确启用这些扩展。请检查您的编译器设置,确保启用了 GCC 扩展。 2. `__weak_symbol` 宏可能没有正确定义。您可以在代码中手动定义这个宏,例如: ```c #ifndef __weak_symbol #define __weak_symbol(symbol) __attribute__((weak)) symbol #endif ``` 3. 确保在使用 `__weak_symbol` 宏时,正确地声明了弱符号。例如: ```c int __weak_symbol(weak_function)(int a, int b) { return a + b; } ``` |
|
|
|
只有小组成员才能发言,加入小组>>
733 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
444浏览 5评论
445浏览 4评论
415浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 08:14 , Processed in 0.790187 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号