静态库和动态库

main.c

#include <stdio.h>
#include "sub.h"

int main(int argc, char *argv[])
{
       int i;
       printf("Main fun!\n");
       sub_fun();
       return 0;
}

sub.c

void sub_fun(void)
{
       printf("Sub fun!\n");
}

sub.h

void sub_fun(void);

静态库:

gcc -c -o sub.o   sub.c
ar  crs  libsub.a  sub.o	(将sub.o打包成libsub.a)
gcc  -o  test  main.c  libsub.a

运行:
不需要把静态库libsub.a放到板子上。
注意:执行arm-linux-gnueabihf-gcc -c -o sub.o sub.c交叉编译需要在最后面加上 -fPIC参数。

动态库

gcc -c -o sub.o   sub.c
gcc -shared  -o libsub.so  sub.o  sub2.o(可以使用多个.o生成动态库)
gcc -o test main.c  -lsub  -L libsub.so所在目录/
gcc -o test main.c  libsub.so  -L libsub.so所在目录/  (和上一条同效果)

动态库运行时候再调用,静态库是直接编译到执行文件中的,因此动态库生成的app文件比较小。

再执行动态库生成的app时,需要指定动态库目录
export LDLIBRARY_PATH=$LDLIBRARY_PATH:/libsub.so所在目录

很有用的gcc选项

gcc -E main.c   // 查看预处理结果,比如头文件是哪个
gcc -E -dM main.c  > 1.txt  // 把所有的宏展开,存在1.txt里
gcc -Wp,-MD,abc.dep -c -o main.o main.c  // 生成依赖文件abc.dep,后面Makefile会用

echo 'main(){}'| gcc -E -v -  // 它会列出头文件目录、库目录(LIBRARY_PATH)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值