【gcc】 gcc编译动态库(共享库)、静态库|链接静态库、动态库

目录

即看即用

一、GCC 简介

GCC编译流程

GCC编译选项

二、GCC生成动态库和静态库

三、生成动态库和静态库实例

四、静态库和动态库的使用和配置

静态库的使用

共享库的使用

不到你指定链接的so错误

编译链接静态库、动态库

链接动态库


即看即用

多个源文件/目标生成动态库
a.
gcc -fPIC -shared xxx1.c xxx2.c xxx3.c -o libxxx.so 
b.
gcc -fPIC -shared xxx1.o xxx2.o xxx3.o -o libxxx.so 

2.多个源文件/目标生成静态库
a.
ar -rc libxxx.a xxx1.o xxx2.o xxx3.o (正确方法)
b.
ar -rc libxxx.a xxx1.c xxx2.c xxx3.c (静态库可以生成;当运行连接了该静态库的可执行程序会报错:could not read symbols:Archive has no index;run ranlib to add one)

链接静态库

gcc -o main2 main.o -L./ -ladd_minus

链接动态库

  1. 在外部告诉程序,动态库在哪里
    有两种方法:
  • 将 libmulti_div.so copy到/lib/ 或 /usr/lib/ 下
    这个方法对很多软件都要使用的库比较友好
  • 在 LD_LIBRARY_PATH 变量中指定库文件路径
    这个一般就是临时弄一下。用法:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/yourpath
  1. 编译链接
gcc -o main4 main.o -L./ -ladd_minus -lmulti_div

一、GCC 简介

《gcc命令》http://man.linuxde.net/gcc

gcc作为编译工具,用在Linux操作系统中,可以编译C、C++、Object-C、JAVA等语言。编译过程中可以带编译选项,选择编译过程。

GCC编译流程

1)预处理 Pre-Processing
2)编译 Compiling
3)汇编 Assembling
4)链接 Linking

GCC编译选项

1、一般选项

1) -c :只编译,不链接,生成目标文件“.o”。
2) -S :只编译,不汇编,生成汇编代码“.S”。
3) -E :只进行预编译/预处理,不做其他处理。

4) -o file:输出文件名为file
5) -g :在可执行程序中包含标准调试信息。
6) -v :打印出编译器内部编译各过程的命令行信息和编译器的版本。
7) -I dir :在头文件的搜索路径列表中添加dir目录
8) -L dir :在库文件的搜索路径列表中添加dir目录
9) -static :连接静态库(静态库也可以用动态库链接方式链接)
10) -llibrary :连接名为library的库文件(显示指定需要链接的动态库文件)

-shared 该选项指定生成动态连接库l -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真 正代码段共享的目的。l -ltest:编译器查找动态连接库时有隐含的命名规则,即在

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值