ubuntu下动态链接库的编译和使用

来源:互联网 发布:网络日记本软件 编辑:程序博客网 时间:2024/05/30 05:23

声明:本博文用于学习总结及工作心得

环境:Uabntu 14.04

1.设置从当前目录下加载动态库so文件(LD_LIBRARY_PATH)


linux的excutable在执行的时候缺省是先搜索/lib和/usr/lib这两个目录,然后按照ld.so.conf里面的配置搜索绝对路径,

linux缺省是不会在当前目录搜索动态库的。

1、临时修改,log out之后就失效 
在terminal中执行:export LD_LIBRARY_PATH=./ 

2、让当前帐号以后都优先加载当前目录的动态库 
在ubuntu中修改~/.profile在文件末尾加上两行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

(而在其它linux中要修改的文件的名称是~/.bash_profile)

3、让所有帐号从此都优先加载当前目录的动态库 
修改/etc/profile在文件末尾加上两行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH  

2.编写makefile文件

1. .so动态库makefile文件

.SUFFIXES:.c .o
CC=gcc
SRCS=test.c
OBJS=$(SRCS:.c=.o)
EXEC=libtest.so 
start: $(OBJS)
$(CC) -shared -o $(EXEC) $(OBJS)
@echo '-----------OK-----------'
.c.o:
$(CC) -Wall -g -fPIC -o $@ -c $<
clean:
rm -rf $(OBJS)


2.运行程序makefile文件

.SUFFIXES:.c .o

CC=gcc
SRCS=a.c
OBJS=$(SRCS:.c=.o)
EXEC=a
start: $(OBJS)
$(CC) -o $(EXEC) $(OBJS) -L. -ltest
@echo '-----------OK-----------'
.c.o:
$(CC) -Wall -g -o $@ -c $<
clean:
rm -rf $(OBJS)

3.make 后执行

参数详解:
      -Wall:包含warning信息
      -fPIC:编译动态库所必须的,输出不依赖位置的代码
      -shared:编译动态库必须
-o:动态库的名字,在这个例子里最终生成动态库libdllfun.so.1.0
-L.代表在当前目录下寻找动态库
-ltest 代表寻找的动态库名字叫做libtest.so
test.c为动态库libtest.so的源文件 a.c为使用动态库的源文件, 其中注意在链接的时候,-L. 和 -ltest的顺序,

如果出现链接出错,动态库中的函数未声明,请看一下使用参数位置出错


0 0
原创粉丝点击