ubuntu中c语言静态库与动态库的制作与使用

静态库的制作及使用

  • 静态库制作步骤
1. 生成制作静态库用的目标文件。  
    gcc -c  xxx.c -o xxx.o
2. 使用ar工具 rcs 参数,制作静态库。
    命名方式:libxxx.a 。   ar rcs  libmymath.a  xxx.o xxx.o 
3. 编写 静态库对应的头文件,包含 函数原型。添加“头文件守卫”
  • 静态库的使用
    方法一:
    - 将 静态库 与 测试文件一同编译生成 可执行文件。
    - gcc test.c libmymath.a -o a.out
    方法二:
    - 使用 -I(大i) 指定 头文件路径。使用 -L 指定 库存储路径。 使用 -l(小L) 指定 库名(去除lib前缀,.a 后缀)。
    - gcc test.c -o test -I ./inc -l mymath -L ./lib

动态库的制作及使用

  • 动态库的制作步骤
1. 生成目标文件(与地址无关 -fPIC)
	 gcc -c xxx.c -o xxx.o -fPIC
2. 制作动态库
	 gcc -shared -o  libmymath.so  xxx.o xxx.o xxx.o 
  • 使用动态库
一、错误示范:
1. -I、-L、-l 依次指定 头文件位置、库路径、库名 编译生成可执行文件。
    gcc test.c -o test -I ./inc -L./lib -lmymath
2. ./test 运行可执行文件。 报错!!!!

二、**介绍连接器 和 动态连接器概念:**
- 连接器:
- 工作于 可执行文件生成之前的 编译后的连接阶段。 -L 和 -l 给连接器使用
- 动态连接器:
- 工作于可执行文件加载到内存开始运行之后。

三、解决动态连接器找不到动态库4种方法
温馨提示:ldd 命令可以查看可执行文件,运行所依赖的 动态库。
	1.环境变量法:
	- export LD_LIBRARY_PATH=./lib
	- - 一旦终端关闭,无效。
	2.将环境变量写入文件:
	- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib  添加到 ~/.bashrc 文件中,每次bash启动都会生效。
    注意使 .bashrc 在终端中生效的三种方法:
			 1)终端输入  source .bashrc
			 2)终端输入  . .bashrc
			 3)重启终端
	3.放置于系统库路径:
	将自定义动态库放置于 标准库的存储目录位置。/lib/x86_64-linux-gnu。 动态连接器自动搜索该目录。
	4.配置文件:
	- 最终目的是 修改 /etc/ld.so.cache (该文件是二进制,不能直接编辑)采用2步达到这一目的。
	    1)将动态库的绝对路径 存放到 /etc/ld.so.conf 文件中。
	    2)使用 sudo ldconfig -v 命令 刷新  /etc/ld.so.cache 文件(包含自定义动态库)。

温馨提示:解决动态连接器找不到动态库的方法建议使用2和4方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值