linux gcc本地链接lib文件(c静态,动态),gcc动态静态连接库

建立共享库的几个步骤:

$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

void show()

{

printf("fred.c is me\n");

}

fred

fred.h

#ifndef FRED_H_

#define FRED_H_

void show();

#endif

main.c

#include

#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。所以不属于动态连接库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值