gcc编译和pthread
-
一、gcc 编译程序
- 预处理
主要处理#include和#define
把#include包含进来的.h 文件插入到#include所在的位置
把#define定义的宏用实际的字符串代替
gcc -E main.c
//终端打印出很多中间的预处理信息
gcc -E main.c -o main.i
//终端不打印,而是输出到main.i的文件中,可以进行查看 - 编译
主要检查是否有语法错误
生成汇编语言
gcc -S main.i -o main.s
//终端打印warning和error - 汇编
生成二进制机器指令文件.o
gcc -c main.s -o main.o
//生成二进制文件 - 链接
加载库文件
生成最后的可执行文件
静态库:编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。
动态库:在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”,如前面所述的libc.so.6就是动态库。Gcc在编译时默认使用动态库。
gcc main.o -o main
//将汇编文件生成可执行文件main - gcc使用
gcc main.c -o main
//相当于直接执行了预编译,编译,汇编,链接四个步骤
二、pthread函数
-
pthread_join()
函数功能:
使一个线程等待另一个线程结束
pthread_t ioThread;
pthread_create(&ioThread, NULL, &gNB_wls_thread, (void*)pFwCtrlBlk);pthread_join(ioThread, NULL);
-
pthread_create()创建线程
void* config_master();
void* config_slave();int main() { pthread_t pid_master; pthread_t pid_slave; pthread_create(&pid_master,NULL,config_master,NULL); pthread_create(&pid_slave,NULL,config_slave,NULL); //注意 create 使用的是&pid pthread_join(pid_master,NULL); pthread_join(pid_slave,NULL); //注意 join 使用的是pid printf("main end\n"); } void* config_master() //注意是创建的是 指针函数 { printf("master start!\n"); return NULL; //返回的类型是指针类型 } void* config_slave() { printf("slave start!\n"); return NULL; }
- 预处理