linux下动态库.so制作与使用实践(ubuntu14.04)

静态库制作和使用实践,见上一篇博文
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命令查看并运行
    这里写图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值