linux 静态库,动态库简单使用示例

nm 命令可以看二进制文件的符号
预编译 去掉宏 gcc -E hello.c -o hello.i
编译 高级语言-->汇编  gcc -S hello.i
汇编 汇编-->目标文件  gcc -c hello.s
链接    gcc hello.o -o hello
.h 源码头文件
.c 预处理前的源码
.i 预处理后的源码
.s 汇编语言文件
.o 目标文件
.a 静态库
.so 共享库
gcc [选项参数] 文件
-c 只编译不链接
-o 指定输出文件
-E 预编译
-S 产生汇编
-Wall 产生尽可能多的警告
-pedantic 对不符合ANSI/ISO c语言标准的扩展语法产生警告
-Werror 将警告作为错误处理
-x 指定源代码语言 gcc -x c++ cpp.c -lstdc++
-g 生成调试信息
-D 定义宏  gcc -DVERSION=3
-o1/o2/o3  优化等级

gcc -I选项指定文件件附加搜索路径
头文件查找顺序
#include <> -I目录,系统目录
#include "" -I目录,当前目录,系统目录

## //连接宏内两个连续的字符串  #define var(x) var##x   var(1)也就是var1
# //将宏参数扩展成字符串字面值 #define str(s) #s   printf(str(wang));

环境变量:
C_INCLUDE_PATH  - c头文件的附加搜索路径,相当于gcc的-I路径
CPATH 与C_INCLUDE_PATH一样
CPLUS_INCLUDE_PATH c++头文件的附加搜索路径

export CPATH=$CPATH:.
export含义保证当前shell的子进程可以使用这个环境变量(子进程继承此
环境变量)。
shell中所启动的任何进程都是shell的子进程
~/.bashrc或者~/.bash_profile

静态库
ar -r libxxx.a xxx.o ...
示例:
gcc -c calc.c
gcc -c show.c
ar -r libmath.o calc.o show.o
gcc main.c -lmain -L.
gcc main.c libmain.a也可以
-L指定库搜索路径,-l指定库名
LIBRARY_PATH 库的搜索路径(给链接器gcc用的)
export LIBRARY_PATH=$LIBRARY_PATH:.
最一般方法:
gcc .c/.o -l<库名> -L<库路径>

动态库:
gcc -c -fpic xxx.c--> xxx.o
-fpic:位置无关代码,可执行程序加载它们时,可将其映射到其地址空间的
任何位置。
gcc -shared xxx.o xxx.o -o libmath.so
gcc main.c -lmath -L.   注:默认先找共享库

LD_LIBRARY_PATH:共享库加载时候的路径(给加载器用的)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值