zoukankan      html  css  js  c++  java
  • __attribute__((weak)) ------ 关于弱符号的用法

    弱符号使用场景

    我们不确定外部模块是否提供一个函数func,但是我们不得不用这个函数,即自己模块的代码必须用到func函数:

    extern int func(void);

    ...................

    int a = func();

    if( a > .....)

    {

    ..........

    }

    ............

    我们不知道func函数是否被定义了

    这会导致2个结果:

    1:外部存在这个函数func,并且EXPORT_SYMBOL(func),那么在我自己的模块使用这个函数func,正确。

    2:外部其实不存在这个函数,那么我们使用func,程序直接崩溃。

    所以这个时候,__attribute__((weak)) 派上了用场。

    在自己的模块中定义:

    int  __attribute__((weak))  func(......)

    {

    return 0;

    }

    将本模块的func转成弱符号类型,如果遇到强符号类型(即外部模块定义了func),那么我们在本模块执行的func将会是外部模块定义的func。

    如果外部模块没有定义,那么,将会调用这个弱符号,也就是在本地定义的func,直接返回了一个1(返回值视具体情况而定)

    相当于增加了一个默认函数。

    原理:连接器发现同时存在弱符号和强符号,有限选择强符号,如果发现不存在强符号,只存在弱符号,则选择弱符号。如果都不存在:静态链接,恭喜,编译时报错,动态链接:对不起,系统无法启动。

  • 相关阅读:
    TCP源码—连接建立
    TCP系列02—连接管理—1、三次握手与四次挥手
    TCP系列01—概述及协议头格式
    ubuntu软件管理apt与dpkg
    318. Maximum Product of Word Lengths
    317. Shortest Distance from All Buildings
    316. Remove Duplicate Letters
    315. Count of Smaller Numbers After Self
    314. Binary Tree Vertical Order Traversal
    313. Super Ugly Number
  • 原文地址:https://www.cnblogs.com/zongfanstudy/p/12720456.html
Copyright © 2011-2022 走看看