声明:本博文用于学习总结及工作心得
环境: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 后执行
如果出现链接出错,动态库中的函数未声明,请看一下使用参数位置出错