GCC 静态库 动态库

hello.c ->(预处理 gcc -E ->hello.i) ->(编译器 gcc -S ->hello.s)/汇编文件 ->(gcc -c->hello.o)/二进制文件 ->(gcc->a.out)/可执行文件

头文件展开,注释去掉
gcc -E hello.c hello.i


C文件变为汇编文件
gcc -S hello.i -o hello.s


汇编文件变为二进制文件
gcc -c hello.s -o hello.o


将函数库钟相应的代码组合到目标文件中
gcc hello.o -o hello

方便记忆:ESC
-O对生成的文件进行指定

-I  指定头文件的位置
-D 指定宏,不需要在程序里特意指定
-O 指定优化程序
-Wall warming信息
-g 增加调试信息
-L 指定lib的目录
-l 指定库的名称,掐头去尾,比如libMyapp.a  则只写Myqpp即可
-shared 生成动态库,命名规则  lib开头

静态库的制作
head.h文件
#include <stdio.h>
int sum(int a,int b);

main.c文件
#include “head.h”
int sum(int a,int b)
{
return a+b;
}

先生成.o文件
gcc -c *.c
ar rcs libMyapp.a *.o 这样就可以打包成.o文件
gcc main.c -I …/include -L …/lib -l Myapp -o app

生成动态库
gcc -shared -o libMyCalc.so *.o -I include

使用的时候

第一种方式:gcc main.c ../lib/libMyapp.so -o app -I include
第二种方式:gcc main.c ../include -L ../lib -lMyapp -o myapp

执行./myapp时,出错 error while loading shared libraries

ldd可以查看程序运行时所依赖的所有动态库共享库

解决方式:
1.LD_LIBRARY_PATH是系统默认的搜索动态库的路径,直接赋值环境变量
export LD_LIBRARY_PATH=./lib
只是临时方式,把终端关闭之后就不行了

2.cd到home 修改.bashrc文件,增加
export LD_LIBRARY_PATH=./lib

3.需要找到动态库的配置文件,动态库的路径写到配置文件中
cd 到etc目录中修改ld.so.conf
更新 一下 sudo ldconfig -v

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值