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;
      }

 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待