
一、gcc 编译程序
- 预处理
主要处理#include和#define
把#include包含进来的.h 文件插入到#include所在的位置
把#define定义的宏用实际的字符串代替
1
2
3
4gcc -E main.c
gcc -E main.c -o main.i
//终端不打印,而是输出到main.i的文件中,可以进行查看 - 编译
主要检查是否有语法错误
生成汇编语言
1
2gcc -S main.i -o main.s
//终端打印warning和error - 汇编
生成二进制机器指令文件.o
1
2gcc -c main.s -o main.o
//生成二进制文件 - 链接
加载库文件
生成最后的可执行文件
静态库:编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。
动态库:在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”,如前面所述的libc.so.6就是动态库。Gcc在编译时默认使用动态库。
1
2gcc main.o -o main
//将汇编文件生成可执行文件main - gcc使用
1
2gcc main.c -o main
//相当于直接执行了预编译,编译,汇编,链接四个步骤
二、pthread函数
- pthread_join()
函数功能:
使一个线程等待另一个线程结束
1
2
3
4pthread_t ioThread;
pthread_create(&ioThread, NULL, &gNB_wls_thread, (void*)pFwCtrlBlk);
pthread_join(ioThread, NULL); - pthread_create()创建线程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31void* ();
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 endn");
}
void* () //注意是创建的是 指针函数
{
printf("master start!n");
return NULL; //返回的类型是指针类型
}
void* config_slave()
{
printf("slave start!n");
return NULL;
}




近期评论