动态库和静态库的生成 linux c/c++
来源:互联网 发布:淘宝没有鼠尾草籽 编辑:程序博客网 时间:2024/05/18 13:48
动态库和静态库的生成 linux c/c++
对于一个编译型语言,编译器工作时总要经过预处理、编译、链接等几个过程。以 C/C++ 为例:预处理器(cpp)将每个 .c/.cpp 文件中 #include 的头文件都合并到 .c/.cpp 文件中,并且对其进行宏扩展,由此生成数个编译单元。一般来说每个 .c/.cpp 文件对应一个编译单元。随后,编译器(cc)将每个编译单元翻译成本地二进制代码,在 GNU/Linux 中后缀是 .o,在 ms vc 中后缀 .obj。这种二进制代码又被称为 object 文件,和最终的目标文件一样也有 code, data, heap, statck 等数据段,但却不可以被运行(缺少入口点)。链接器(ld)将多个 object 文件在目标文件中重新定位,也就是 relocate 的过程,再加入额外的一些代码(其他的链接文件),最终生成目标文件。目标文件可以是可执行文件,静态链接文件,或者动态链接文件。
1.在 GNU/Linux 系统中静态链接文件实际上就是多个 .o 文件的压缩包。假设我们有 cool.h cool.c 和 some.c 文件,要得到静态链接库 libcool.a。首先使用如下指令得到相应的 object 文件 cool.o 和 some.o:
gcc -c cool.c
gcc -c some.c
用这种方法生成的 object 文件称为 PDC 即位置相关代码(position-dependence code)。再使用如下指令可以得到静态链接文件 libcool.a:
ar -r libcool.a cool.o some.o
ranlib libcool.a
静态链接库 libcool.a 遵从 GNU/Linux 规定的静态链接库命名规范,必须是"libyour_library_name.a"
2.在 GNU/Linux 中动态链接文件,必需通过链接器 ld 生成。假设我们有 hot.c other.c 等文件要生成动态链接库 libhot.so 。首先使用如下指令得到相应的 object 文件 hot.o 和 some.o
gcc -fPIC -c hot.c
gcc -fPIC -c other.c
参数 -fPIC 指定生成的 object 文件为位置无关代码(position-independence code),只有 PIC 可以被用作生成动态链接库。然后使用如下指令得到动态库:
ld -Bshared -o libhot.so hot.o other.o
或者可以使用编译器的ld wrapper:
gcc -shared -o libhot.so hot.o other.o也可以使用编译器直接生成动态库:
gcc -fPIC -shared -o libhot.so hot.c other.c
这里选项 -shared 指示目标文件的类型是动态链接库,动态库的命名规范是"libyour_library_name.so"
- 动态库和静态库的生成 linux c/c++
- 动态库和静态库的生成 linux c/c++
- linux c/c++ 动态库和静态库的生成与使用
- 在Linux中生成C/C++动态库和静态库的方法
- Linux C静态库和动态库的制作
- Linux C 静态库和动态库的使用
- Linux C:生成、调用静态库/动态库,.a,.so
- c语言生成静态库.a和动态库.so
- linux下C的动态库生成和调用
- C/C++中生成动态库和静态库的方法
- C++: Linux上静态库和动态库
- Linux c 开发 - 静态库和动态库
- Linux下C调用静态库和动态库
- 【C语言】Linux下动态库和静态库详解
- linux生成动态库和静态库
- Linux生成静态库和动态库
- Golang生成共享库(shared library)以及Golang生成C可调用的动态库.so和静态库.a
- linux下的静态库和动态库生成
- Java之美[从菜鸟到高手演变]之常见的几种排序算法-插入、选择、冒泡、快排、堆排等
- VedioView视频截图
- C++编写动态插件应注意的问题
- C语言:全局变量在多个c文件中公用的方法
- flex
- 动态库和静态库的生成 linux c/c++
- 如何查看ubuntu的内核版本和发行版本号?
- VC++ 6.0 环境下用MFC开发常见问题及解决办法
- heritrix 3.1.1限制爬取范围
- 主流智能手机屏幕材质介绍 及 LCD闪屏现象分析
- Uva-11488-Hyper Prefix Sets
- ztree API文档参考地址
- 关于程序员学英语的经验
- Intent调用大全