gcc语法
gcc编译过程:预处理-cpp(.i)、编译-cc1(.s)、汇编-as(.o)、连接-ld
-E 激活预处理
-S 激活预处理、编译
-c 激活预处理、编译、汇编
-o 编译出可执行文件
-v 查看链接库文件是否存在
-Idir_name 指定头文件路径
-ifile_name 相当于#inlcude
-Ldir_name 指定库文件路径
-lname 链接库文件libname.a
-g 产生供gdb调试的符号信息
-ggdb 以本地格式输出调试信息
-glevel 请求生成调试信息
-E 展开程序中的宏
-S 产生汇编程序
-static 禁止使用动态库
-shared(-G) 尽量使用动态库
-symbolic 建立共享时把应用绑定到全局符号
-Wall 输出警告信息
-pedantic 允许发出ANSI/ISO C标准的警告
-werror 把所有警告转换为错误
-w 关闭所有警告
-Dmacro 相当于#define macro
-Dmacro=def 相当于#define macro=def
-Umacro 相当于#undef macro
-undef 取消任何非标准宏的定义
-O 在编译过程做最佳优化
-O2 比-O更好的编译优化
-shared 指定生成动态连接库
-fPIC 编译为位置独立的代码
静态库与动态库
静态库命名:libxxxx.a
动态库命名:libxxxx.so.major.minor
ar cr/cqs libxxxx.a xxxx.o
gcc -shared -fPCI -o libxxxx.so xxxx.o
-WI,-Bstatic 指示与静态库链接
-WI,-Bdynamic 指示与动态库链接
ldd exefile 查看可执行文件依赖哪些库
nm libxxxx.so 查看库中涉及到的符号
U 库中调用但未定义
T 库中定义
W 库中定义弱态符号
动态库安装:
1.库放在 /usr/lib 或 /lib
2.在环境变量LD_LIBRARY_PATH中加上库路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:dir_name
3.在/etc/ld.so.conf文件中添加路径 执行ldconfig刷新
当静态库和动态库同名时, gcc命令将优先使用动态库
strip命令可减小可执行文件
readelf -s / objdump -t / ldd
make语法
-ldirname 指定被包含的makefile目录
-w 若执行时改变目录则打印当前目录
-d 打印调试信息
-k 程序错误仍继续向下运行
$@ 规则的目标所对应的文件名
$< 规则中的第一个文件名
$^ 规则中所有相关文件的以空格分隔的列表
$? 规则中日期新与目标的文件列表
$(@D) 目标文件的目录部分
$(@F) 目标文件的文件名部分
$* 目标模式中%及其之前部分
阅读(346) | 评论(0) | 转发(0) |