您的位置:首页 > 其它

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

#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。所以不属于动态连接库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: