linux下静态库与动态库

linux C/C++ 编译静态库.a 或者动态库.so

无论是静态库还是动态库,只是函数调用的时间不一样,编译的话都需要相应的目标文件

所以

例如有 a.c b.c 为依赖文件,c.c中调用a.c b.c中的函数

1、生成目标文件

  C语言的话用gcc

   gcc -c a.c b.c

  C++用g++

  g++ -c a.c b.c

这样生成了 a.o b.o

2、生成库文件

  1)静态库.a

  对于静态库归类为文档 (archive)

  所以用ar -r 来实现

  ar -r libc.a a.o b.o

  这样就利用a.o b.o 产生了静态库文件libc.a

  2)动态库

  gcc -fpic -shared  a.o b.o -o libc.so

关于库文件的命名一般以lib+名字+.o/.so

这是因为在调用的时候只需以 -l+名字调用就可以了 

 

同理对与c++来讲,调用g++就可以了。

3、库文件的使用

  1)静态库的使用

  gcc  c.c -lc -L ./ -o c

    -L 指定静态库的路径  ,不然会报路径存在错误。

 2)动态库的使用

  gcc  c.c -lc -L ./ -o c

  但是动态库报了下面的错误,查找相应文档提示,linux下不会自动连接当前文件夹,所以用 export LD_LIBRARY_PATH=./ 指定一下路径即可

./hello: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory

export LD_LIBRARY_PATH=./

 

 

题外话:

  gcc与g++的区别

  编译一般分为编译和链接

对于c和c++的编译阶段都是一样的,g++也是调用的gcc来执行的,不信的话可以自己找些资料看一下

在链接的阶段,g++也是使用gcc链接了一些c++的标准链接库。 -lstdc++

转载于:https://www.cnblogs.com/lobsterIT/p/5654118.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值