gcc动态静态连接库
2014-03-04 00:00
274 查看
摘要: 讲述如何生成动态,静态连接库
建立共享库的几个步骤:
$gcc -c -fpic file_1.c
生成file_1.o
$gcc -shared -o libfile_1.so file_1.o
生成一个动态库libfile_1.so,命名方式为libXX.so
$gcc -LX -o output file_2.c -lfile_1
此时生成了一个执行程序:file_2
-L和路径之间有无空格都可以,习惯都使用没有空格的。如果生成的libXX.so不在系统默认的库文件内,是不会连接成功的。
运行时会出现问题,因为程序在运行时会查找默认的共享库目录,发现没有就会报错
去设置路径。或者把库复制到/usr/lib/中,一般不这么做
$export LD_LIBRARY_PATH=X
最后就可以执行了
注:本文的X,为路径。XX为名称
静态库
一样,只是用归档工具制作一个静态库
实例:
fred.c
fred
fred.h
main.c
——————————————动态库——————————————————
$gcc -c -fpic fred.c
生成fred.o
$gcc -shared -o libfred.so fred.o
生成libfred.so
$gcc -L./ -o test main.c -lfred
生成主程序
$export LD_LIBRARY_PATH=./
./test
输出
fred.c is me
this is main.c
——————————————静态库————————————————————
$gcc -c fred.c
生成fred.o
$ar -crv libfred.a fred.o
生成静态库libfred.a
$ranlib libfred.a
函数库内容表
$gcc -o test main.c libfred.a 或者 $gcc -o test main.c -L./ -lfred
生成test
运行
./test
输出和上面一样
————————————————————————————————————————
总结:
静态库是把代码加到程序中,动态库是运行时才会加载需要的函数。所以静态库最后运行时不需要设置函数库路径
在boost编译是.hpp 采用的组织是把源代码写到.hpp。所以不属于动态连接库
建立共享库的几个步骤:
$gcc -c -fpic file_1.c
生成file_1.o
$gcc -shared -o libfile_1.so file_1.o
生成一个动态库libfile_1.so,命名方式为libXX.so
$gcc -LX -o output file_2.c -lfile_1
此时生成了一个执行程序:file_2
-L和路径之间有无空格都可以,习惯都使用没有空格的。如果生成的libXX.so不在系统默认的库文件内,是不会连接成功的。
运行时会出现问题,因为程序在运行时会查找默认的共享库目录,发现没有就会报错
去设置路径。或者把库复制到/usr/lib/中,一般不这么做
$export LD_LIBRARY_PATH=X
最后就可以执行了
注:本文的X,为路径。XX为名称
静态库
一样,只是用归档工具制作一个静态库
实例:
fred.c
#include<stdio.h> void show() { printf("fred.c is me\n"); }
fred
fred.h
#ifndef FRED_H_ #define FRED_H_ void show(); #endif
main.c
#include<stdio.h> #include "fred.h" void main(void) { show(); printf("this is main.c\n"); }
——————————————动态库——————————————————
$gcc -c -fpic fred.c
生成fred.o
$gcc -shared -o libfred.so fred.o
生成libfred.so
$gcc -L./ -o test main.c -lfred
生成主程序
$export LD_LIBRARY_PATH=./
./test
输出
fred.c is me
this is main.c
——————————————静态库————————————————————
$gcc -c fred.c
生成fred.o
$ar -crv libfred.a fred.o
生成静态库libfred.a
$ranlib libfred.a
函数库内容表
$gcc -o test main.c libfred.a 或者 $gcc -o test main.c -L./ -lfred
生成test
运行
./test
输出和上面一样
————————————————————————————————————————
总结:
静态库是把代码加到程序中,动态库是运行时才会加载需要的函数。所以静态库最后运行时不需要设置函数库路径
在boost编译是.hpp 采用的组织是把源代码写到.hpp。所以不属于动态连接库
相关文章推荐
- gcc编译生成静态及动态链接库步骤
- gcc同时连接静态和动态库
- 静态连接和动态链接有什么区别?
- linux下动态连接变为静态打包,使用statifier_S展翅飞_新浪博客
- DLL专题之动态连接库的静态调用(1)
- 程序动态链接、静态连接的对比(优缺点)
- 一篇很不错的介绍静态连接和动态链接的文章
- gcc调试中使用静态连接库和动态链接库以及-I -l L含义
- gcc -l 链接共享库(动态/静态共享库)
- gcc生成.a静态库和.so动态库文件
- 程序动态链接、静态连接的对比(优缺点)
- gcc生成.a静态库和.so动态库文件
- gcc编译生成静态及动态链接库步骤
- gcc编译生成静态及动态链接库步骤
- 使用静态库 静态连接和动态连接
- gcc编译生成静态及动态链接库步骤
- gcc同时使用动态和静态链接
- gcc指定库路径,头文件路径以及实现静态动态链接 .
- gcc动态编译和静态编译方法
- gcc编译生成静态及动态链接库步骤