linux学习笔记
一、静态库与动态库的制作
1.1 静态库
1.1.1 静态库编译时与主程序一起编译
1.1.2 g++ -c -o xxx.a xxx.cpp就可以制作一个静态库
1.1.3 g++ -o xxx xxx.cpp xxx.a(或者用-L指定库目录 -l指定库名称)可以把静态库和主程序编译为一个可执行文件
1.2 动态库
1.2.1 程序运行时候才会载入
1.2.2 g++ -fPIC -shared -o xxx.so xxx.cpp可以制作动态库
1.2.3 使用方法与静态库相同,如果编译时候存在同名的静态库和动态库,优先使用动态库
1.2.4 后缀为so
1.2.5 linux下使用动态库需要通过LD_LIBRARY_PATH环境变量来指定动态库的位置
二、make与makefile
2.1 一个规则
目标文件:依赖文件
执行语句
2.2 两个函数
wildcard目录下全文件类型名称匹配
patsubst 目录下全类型文件后缀替换
2.3 伪目标
.PHONY 不检查依赖项,直接执行命令
2.4 几个变量
$开头的几个变量
三、gdb的使用
3.1
gdb xxx开始调试程序
gdb xxx -p 进程号 调试正在运行中的程序
3.2
b设置断点
set args设置运行参数 参数如果包含特殊字符,可以将参数用双引号括起来
r 运行程序
s 步入程序 如果没有源码,就无法步入只会进入下一行
n 步过程序
p 打印变量或者表达式的结果
c 继续运行到下一个断点
q 退出gdb
set var xx= 123 设置变量的值
list 显示源代码
info b查看断点
3.3
ulimit -a 查看系统参数 系统参数缺省不会生成core文件
ulimit -c unlimit 把core文件大小限制设置无限制
运行程序,程序崩溃,形成core文件
gdb 程序名 core文件名 利用core文件调试程序
bt 查看中断时候函数调用栈
3.4
调试多进程时,缺省调试的默认为父进程,
进行fork前使用set follow-fork-mode child可以切换到调试子进程
使用set detach-on-fork [on/off]可以设置调试时候其他进程是否正常进行
info inferiors 查看调试的进程
inferiors 进程id 切换当前调试进程
3.5
调试多线程时
info threads 查看线程信息
thread 线程id 切换调试线程
set scheduler-locking [on/off]设置调试时候其他线程是否正常进行
thread apply all/线程id gdb命令 指定所有或者某条线程执行命令