《在编译两个不同的库时,不想相互include头文件,但又需要用到对方的函数,可以用extern》

  以下是个人理解,水平有限,可能不太准确。有问题,麻烦指出。

demo:

a.so

void a_fun(void)
{
   b_fun();
}

b.so

void b_fun(void)
{
 //
}

b.h

void b_fun(void)

  如果a库中的文件想要使用b_fun()函数,有两种方法,一种是include b.h,另一种是直接extern b_fun()函数。

 

include的方法:

  那么就需要编译a.so的时候,b.so要提前编译。存在先后顺序。否则会提示找不到b.h这个头文件。

 

extern的方法:

  编译的时候就可以单独各编各的。只需要在其他应用程序中链接这两个库的时候,a.so才会去找b_fun的函数实现。

 

  结论:所以两个库需要相互调用,最好不要直接include对方的头文件,否则会造成依赖关系。可以用extern或者注册回调函数的方式。

 

posted @ 2023-02-22 11:44  一个不知道干嘛的小萌新  阅读(44)  评论(0)    收藏  举报