静态库制作和使用实践,见上一篇博文
http://blog.csdn.net/qq_26437925/article/details/51541717
linux 动态库 .so 实践如下:
基本文件同上一个静态库的文件,目录如下
除了Makefile文件外,其他文件都是相同的。动态库生成需要使用的是 gcc -shared -fPIC 而不是 静态库的ar名利
Makefile
.PHONY: build test clean
CC=gcc
OBJ_DIR=./obj
LIB_DIR=./lib
HEADERS=-I./include
DEBUG=-g -ggdb
WALL=-Wall -W
CFLAGS=$(WALL) $(DEBUG)
LIB_CC=$(CC) $(CFLAGS) $(HEADERS)
LIB_OBJ = $(addprefix $(OBJ_DIR)/, my_math.o my_print.o)
prepare:
@-if [ ! -d $(OBJ_DIR) ]; then mkdir $(OBJ_DIR); fi
@-if [ ! -d $(LIB_DIR) ]; then mkdir $(LIB_DIR); fi
build:prepare $(LIB_DIR)/libmylib.so
$(LIB_DIR)/libmylib.so:$(LIB_OBJ)
$(CC) -shared -fPIC $^ -o $@
$(OBJ_DIR)/%.o:src/%.c
$(LIB_CC) -fPIC -c $< -o $@
test:a.out
a.out:test.c
$(LIB_CC) test.c -L$(LIB_DIR) -lmylib
clean:
@-rm -rf $(OBJ_DIR)
@-rm $(LIB_DIR)/libmylib.so
@-rm -rf $(LIB_DIR)
@-rm a.out
仍然是如下的几个make命令
make build
make test
make clean
动态库找不到的解决方法,参考如下博文
http://blog.csdn.net/lqhbupt/article/details/7875112
ldd命令可以打印出可执行文件的共享库文件,一个shell脚本,通过ld-linux.so实现,ld-linux.so先于可执行文件执行,获取控制权,可查看可执行文件的共享库依赖关系。
1 通过环境变量设置
- 添加了一个LD_LIBRARY_PATH(环境变量文件很多,自行google),source命令生效
- 通过ldd命令查看,并运行
2 通过/usr/lib添加使用
直接把.so复制到/usr/lib下,并通过ldconfig命令生效
ldd命令查看并运行