linux里面线程编译运行问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux里面线程编译运行问题相关的知识,希望对你有一定的参考价值。

今天老师讲了多线程编程写了一个很简单的创建线程C程序,然后就编译。C文件名为threadcreatetest.c
格式是#gcc -Wall-lpthread threadcreatetest.c
我就是想问问和编译C里面有什么区别?#gcc a.c -o a这个前面gcc是编译,a.c是源文件名,a是目标文件名,然后运行时./a但是多线程里面是怎么的呢?我看不懂 -Wall后然运行怎么又是/a.out 呢?有点搞不懂了。。。希望高手说详细点,刚学。。。
threadcreatetest.c源文件为
#include<pthread.h>
#include<stdio.h>
void *create(void *arg)

printf("new thread created ......");


int main(int argc,char *argv[])
pthread_t tidp;
int error;
error=pthread_create(&tidp,NULL,create,NULL);
if(error!=0)
printf("pthred_create is not created...");
return -1;


printf("pthread_create is created.....");
return 0;

最上面这个create函数什么意思?主函数里面调用了的?我看貌似没调用哇。。后面if语句能看懂,就是不懂怎么传参的,全局变量在2个线程里各自享有存储空间也知道,也就是全局变量,他们分别可以修改但互不影响

gcc xxx.c -lpthread 其中的-l是指包含的lib库,具体写法可以man gcc看下
多线程函数除了要包含头文件pthread.h外还必须要包含lib库pthread
pthread_create是创建线程,但具体的线程里面做什么事是在void *create(void *arg)里,这个函数名是自己任意区的,但返回值和参数一般都是void*类型,因为pthread_create函数的定义就是这样
int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);

参考资料:http://baike.baidu.com/view/1797052.htm

参考技术A #gcc a.c -o a #此句的-o a说明输出目标文件为“a”;
#gcc -Wall-lpthread threadcreatetest.c #此句未注明输出目标文件名,系统默认输出为a.out,所以编译之后执行./a.out文件。
如果上句也没有指明“ -o a ”的话,输出也是a.out,你可以试试
参考技术B -Wall是打开warning的意思,理解为Warnings All.
还想问啥,貌似你问的有点混乱,看不懂追问

就是还有下面的,我们同学今天编译就直接gcc xxx.c -lpthread,,也可以编译,后然./a.out也可运行,今天刚上第一节课,不好意思啊,

编写进程线程常用的linux命令

uname -a : 查看 linux 的版本号

ipcrm: 结束一个进程

lsipc 或 ipcs: 查看进程信息

ipcmk:创建

pstree: 查看系统所有线程

pstree | grep 运行程序名 : 查看对应程序的所有线程

gcc 1.c -g: 将原程序1.c编译成可被 gdb 调试的程序

gdb a.out:调试运行a.out

grep -R "^struct msqid_ds"  结构体原型所在的头文件(当前路径在相关路径下就不需要写):

        查看结构体原型

gedit:以记事本的形式查看文件

本人经验之作,望点赞^o^

以上是关于linux里面线程编译运行问题的主要内容,如果未能解决你的问题,请参考以下文章

编译并运行 OpenMPI 程序

如何在VS2010中运行编译C和C++?

一次linux中定位c++程序运行异常的经历

多文件使用linux进行编译

使用 MSVC 编译的多线程应用程序在运行时失败

linux下怎样编译代码运行速度最快