gcc创建和使用动态库、静态库
来源:互联网 发布:js获取多选框选中的值 编辑:程序博客网 时间:2024/06/04 18:30
本文以工程libtest为例来说明用gcc创建和使用静态库、动态库的过程。libtest工程目录结构如下:
libtest/include/hello.h文件内容:
#ifndef __HELLO_H__#define __HELLO_H__ void sayHello(void); #endif
libtest/lib/hello.c文件内容:
#include "hello.h"#include <stdio.h> void sayHello(void){ printf("Hello Geeks !\n");}
libtest/src/main.c文件内容:
#include "hello.h" int main(void){ sayHello(); return 0;}
创建并使用静态库:
1,进入libtest/lib目录,执行命令:
gcc -c -I../include hello.c该命令将会在当前目录生成目标文件hello.o。
注意:参数-I是添加头文件搜索目录,这里因为hello.c中有#include "hello.h", hello.h在libtest/include目录中,这里需要指定该目录通知gcc,否则会出现错误提示“找不到头文件hello.h”。
2,在libtest/lib目录中执行命令:
ar rc libhello.a hello.o该命令将会在当前目录生成静态库文件libhello.a。
ar命令就是用来创建、修改库的,也可以从库中提出单个模块,参数r表示在库中插入或者替换模块,c表示创建一个库。
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即可。
4,运行main程序:
./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时却提示错误:
也就是找不到动态库文件libhello.so,在网上找了答案说如果遇到这样的问题需要设置环境变量LD_LIBRARY_PATH,如下:
export LD_LIBRARY_PATH="../lib"
然后再执行./main就没有错误了。
PS:
环境变量LD_LIBRARY_PATH指示动态连接器可以装载动态库的路径,在链接动态库文件前设置该变量为库文件所在路径。注意:用export LD_LIBRARY_PATH=”…”方式只是临时生效的,如果要永久有效可以写入~/.bashrc文件中,跟修改PATH类似,export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:”…”。当然如果有root权限的话,也可以修改/etc/ld.so.conf文件,将要添加的动态库搜索路径写入该文件中,然后调用/sbin/ldconfig来达到同样的目的。
- gcc的静态库和动态库创建和使用
- gcc创建和使用静态库、动态库
- gcc创建和使用静态库、动态库
- gcc创建和使用静态库、动态库
- gcc创建和使用静态库、动态库
- gcc创建和使用静态库、动态库 转载
- gcc创建和使用动态库、静态库
- gcc创建和使用静态库、动态库
- gcc创建和使用静态库、动态库
- GCC创建使用静态库,动态库
- gcc 创建静态库和动态库
- gcc使用静态库和动态库
- gcc使用静态库和动态库
- gcc创建,使用静态库
- linux下使用GCC生存和使用静态、动态库
- gcc创建,使用动态库
- GCC 编译使用动态链接库和静态链接库
- GCC 编译使用动态链接库和静态链接库
- Auto Layout 进阶
- ImageSwitcher的使用
- 《C++ primer》习题4.28程序
- Qt基础编程 绘制坐标轴
- lib网络库的解释
- gcc创建和使用动态库、静态库
- 数组清零
- hihoCoder #1014 : Trie树
- 解决putty中文乱码问题
- iOS8开发~UI布局(一)初探Size Class
- Android项目中自定义顶部标题栏Activity座位基类Activity
- 第八周 项目四:String类的构造
- 浙江大学PAT_乙级_1009. 说反话 (20)
- 宽带和下载速度是怎么换算的,它们之间的区别