GodLong 2009-11-12
linux下动态库的编译
1实践
test_cl.c:
1#include<stdio.h>
2#include<stddef.h>
3
4externintadd(inta,intb);
5#defineLabelAddr
6main()
7{
8inti=0;
9printf("helloworld!\n");
10printf("label_abc=%d\n",&&label_abc);
11//i=&&label_abc;
12//goto*i;
13goto*(&&label_abc);
14printf("aftergoto\n");
15label_abc:
16printf("label_abc\n");
17i++;
18
19
20printf("add(a+b)=%d\n",add(1,2));
21return0;
22
23}
test_so.c
1intadd(inta,intb)
2{
3returna+b;
4}
test_so1.c
1intadd(inta,intb)
2{
3returna-b;
4}
1、
gcc-c-fPICtest_so.c
生成test_so.o
2、
gcc-shared-fPIC-olibtest_so.sotest_so.o
生成libtest_so.so
3、
(rmtest_so.o)
gcctest_cl.c-L.-ltest_so
4、
exportLD_LIBRARY_PATH=`pwd`
5、
./a.out
结果是add(a+b)=3
6、
(rmlibtest_so.so)
gcc-shared-fPIC-olibtest_so.sotest_so1.c
7、
./a.out
结果是add(a+b)=-1
(如果动态库依赖于其他的动态库不存在,在链接成可执行文件时才会报错)
(优先链接动态库的,除非用-static参数指定链接静态库)