1 2 3 4 5 6 7 8 | #include <stdio.h> void func_DEFAULT(){ printf("func_DEFAULT in the shared library, Not preempted\n"); } void func_PROC(){ printf("func_PROC in the shared library, Not preempted\n"); } |
1 2 3 4 5 6 7 | extern void func_DEFAULT(); extern void func_PROC(); void invoke(){ func_DEFAULT(); func_PROC(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> extern void func_DEFAULT(); extern void func_PROC(); extern void invoke(); int main(){ invoke(); return 0; } void func_DEFAULT(){ printf("func_DEFAULT redefined in main program, Preempted ==> EXP\n"); } void func_PROC(){ printf("func_PROC redefined in main program, Preempted ==> EXP\n"); } |
1 2 3 | func_DEFAULT__Fv export func_PROC__Fv protected invoke__Fv |
1 2 3 4 5 6 7 8 9 10 | /* generate position-independent code suitable for use in shared libraries. */ $ xlC -c func.C invoke.C -qpic /* generate shared library, exportlist is used to control symbol visibility */ $ xlC -G -o libtest.so func.o invoke.o -bE:exportlist $ xlC -c main.C /* -brtl enable runtime linkage. */ $ xlC main.o -L. -ltest -brtl -bexpall -o main |
1 2 3 | $ ./main func_DEFAULT redefined in main program, Preempted ==> EXP func_PROC in the shared library, Not preempted |
1 2 3 4 | $ xlC main.o -L. -ltest -brtl -o main; //-brtl enable runtime linkage. $ ./main func_DEFAULT in the shared library, Not preempted func_PROC in the shared library, Not preempted |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | $ dump -TRv libtest.so libtest.so: ***Loader Section*** ***Loader Symbol Table Information*** [Index] Value Scn IMEX Sclass Type IMPid Name [0] 0x00000000 undef IMP DS EXTref libc.a(shr.o) printf [1] 0x2000040c .data EXP DS SECdef [noIMid] func_DEFAULT__Fv [2] 0x20000418 .data EXP DS SECdef [noIMid] func_PROC__Fv [3] 0x20000424 .data EXP DS SECdef [noIMid] invoke__Fv ***Relocation Information*** Vaddr Symndx Type Relsect Name 0x2000040c 0x00000000 Pos_Rel 0x0002 .text 0x20000410 0x00000001 Pos_Rel 0x0002 .data 0x20000418 0x00000000 Pos_Rel 0x0002 .text 0x2000041c 0x00000001 Pos_Rel 0x0002 .data 0x20000424 0x00000000 Pos_Rel 0x0002 .text 0x20000428 0x00000001 Pos_Rel 0x0002 .data 0x20000430 0x00000000 Pos_Rel 0x0002 .text 0x20000434 0x00000003 Pos_Rel 0x0002 printf 0x20000438 0x00000004 Pos_Rel 0x0002 func_DEFAULT__Fv 0x2000043c 0x00000006 Pos_Rel 0x0002 invoke__Fv |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |