静态库和动态库创建过程

来源:互联网 发布:音乐节 知乎 编辑:程序博客网 时间:2024/06/07 19:02

libtest/include/hello.h

 

#ifdef _HELLO_H_#define _HELLO_H_void hello();#endif

libtest/lib/hello.c

#include "hello.h"#include <stdio.h>void hello(){printf("hello world!\n");}

libtest/src/main.c

#include "hello.h"int main(){hello();}

静态库过程如下:

(1)      进入libtest/lib目录,执行命令:

       gcc -c -I../include hello.c

       该命令生成目标文件hello.o,注意:参数-I添加头文件搜索目录,这里因为hello.c中有#include “hello.h”,hello.h在libtest/include目录中,这里需要指定该目录通知gcc,否则出现错误提示“找不到头文件hello.h”。

       这一步将在libtest/lib目录中生成一个hello.o文件。

(2)      在libtest/lib目录,执行命令:

       ar rc libhello.ahello.o

       该命令将hello.o添加到静态库文件libhello.a,ar命令就是用来创建、修改库的,也可以从库中提出单个模块,参数r表示在库中插入或者替换模块,c表示创建一个库,关于ar命令的详细使用规则可以参考文章http://blog.csdn.net/xuhongning/article/details/6365200。

这一步将在libtest/lib目录中生成一个libhello.a文件。

(3)      进入libtest/src目录,执行命令:

       gcc main.c-I../include -L../lib -lhello -o main

       该命令将编译main.c并链接静态库文件libhello.a生成可执行文件main,注意:参数-L添加库文件搜索目录,因为libhello.a在libtest/lib目录中,这里需要指定该目录通知gcc,参数-l指定链接的库文件名称,名称不用写全名libhello.a,只用写hello即可。

       这一步将在libtest/src目录中生成可执行文件main。

 

动态库过程如下:

(1)      进入libtest/lib目录,执行命令:

       gcc hello.c-I../include -fPIC -shared -o libhello.so

       这一步将在当前目录生成动态库文件libhello.so,参数-fPIC -shared固定格式,不用纠结他们什么意思。

(2)      进入libtest/src目录,执行命令:

       gcc main.c-I../include -L../lib -lhello -o main

       此时在当前目录中已经生成了可执行文件main,执行./main时却提示错误:

       ./main: error while loading shared libraries: libhello.so: cannotopen shared object file: No such file or directory

也就是找不到动态库文件libhello.so,在网上找了答案说如果遇到这样的问题需要设置环境变量LD_LIBRARY_PATH,如下:

       export LD_LIBRARY_PATH=”../lib”

       gcc main.c -I../include -L../lib -lhello -o main

       然后再执行./main就没有错误了。

【补充】

       环境变量LD_LIBRARY_PATH指示动态连接器可以装载动态库的路径,在链接动态库文件前设置该变量为库文件所在路径,注意:用export LD_LIBRARY_PATH=”…”方式只是临时生效的,如果要永久有效可以写入~/.bashrc文件中,跟修改PATH类似,exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:”…”。

       当然如果有root权限的话,也可以修改/etc/ld.so.conf文件,将要添加的动态库搜索路径写入该文件中,然后调用/sbin/ldconfig来达到同样的目的。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 酵素浴生蛆虫该怎么办 做销售年纪大了怎么办 我的手表进水了怎么办 美度手表进水了怎么办 买了瓶过期香水怎么办 宝宝吃了润唇膏怎么办 新生3天宝宝打嗝怎么办 咖啡喝多了恶心怎么办 喝咖啡恶心想吐怎么办 咖啡喝多了头晕怎么办 喝咖啡反胃想吐怎么办 咖啡喝多了胃疼怎么办 喝了咖啡想吐怎么办 微商别人觉得贵怎么办 id被别人锁定了怎么办 2017闯红灯扣6分怎么办 乐天玛特超市卡怎么办 乐天玛特的卡怎么办 乐天玛特倒闭 卡怎么办 公租房五年到期怎么办 超市的水杯坏了怎么办 玩天涯明月刀卡怎么办? 想开童装店没什么经验怎么办 孕后期鼻炎犯了怎么办 酷狗国外听不了怎么办 酷狗音乐换手机怎么办 有优势卵泡不排卵怎么办 卵泡30mm不破怎么办 成熟的卵泡不破怎么办 卵泡大了不破怎么办 卵泡突然不长了怎么办 想怀孕卵泡不长怎么办 吉吉影音下载慢怎么办 辞职后社保断了怎么办 2岁泡泡糖咽下去怎么办 我在拼多多开团怎么办 养了一条鱼死了怎么办 鱼缸的鱼尾巴烂怎么办 捡到玉佛吊坠该怎么办 晚上睡不踏实多梦易醒怎么办 红米3s蓝屏怎么办