linux下动态库的编译使用

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参数指定链接静态库)

相关推荐