这个性质就是: 主program的symbol优先于连接于so的symbol。

假设主程序为foo_main.c, so的程序体为foo.c;他们定义了同一个symbol foo();foo_main.c 中调用了foob(), 而foob定义在foo.c 中;

foo_main.c如下:
8 int foo()
9 {
10 printf("%sn", "foo() in foo_main.c!");
11 return 0;
12 }
13
14 int main()
15 {
16 foob(); // foob是so的一个函数
17 return 0;
18 }

foo.c如下:
4 int foo()
5 {
6 printf("%sn", "foo() in foo.c!");
7 return 0;
8 }
9
10 int foob()
11 {
12 foo();
13 return 0;
14 }

以上program 编译连接声称foo_main.test 和 foo.so, 运行foo_main.test结果为:
[root@localhost dyn_libs]# ./foo_main.test
foo() in foo_main.c!

Advertisements