9 月 2024

linux系统gcc编译动态库so中的attribute((weak))弱符号使用

首先说明下代码结构:一共三个源码,两个动态库so的源码:lib1.c和lib2.c,各导出一个库函数(gcc编译时默认导出,不像windows的msvc要明确指定导出dllexport),一个主执行程序源码:main.c,调用两个动态库的导出函数,如下:

lib1.c

1
2
3
4
5
6
#include <stdio.h>
 
void lib1_func(const char* from)
{
        printf("lib1 func from %s\n", from);
}

lib2.c

1
2
3
4
5
6
#include <stdio.h>
 
void lib2_func(const char* from)
{
        printf("lib2 func from %s\n", from);
}

main.c

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
void lib1_func(const char* from);
void lib2_func(const char* from);
 
int main()
{
        printf("hello from main\n");
        lib1_func("main");
        lib2_func("main");
        return 0;
}
Continue reading…