Linux下多线程编程遇到的一些问题
2016-03-21 10:35
435 查看
今天在学习了Linux的多线程编程的基础的知识点。于是就试着做了一个简单的Demo。本以为会得到预期的结果。不成想却遇到了意想不到的问题。
第一种方式:改变编译器的路径,到setting–>complier–>link complier.然而这并没有解决我的问题,编译过之后,仍旧还是这搁错误
第二种方式:网上说Pthread并不是Linux的默认的库,连接时需要使用库libpthread.a。也就是在编译的时候 添加在*.c 文件的后面。这个方法在我的项目中,竟然成功的运行了。
编程之路比较的坎坷,脚踏实地的思考,才能最快的解决问题。
代码展示
我的C 代码很简单,就是一个简单的示例程序,如下:#include <stdio.h> #include <stdlib.h> #include<pthread.h> int sum ; void* runner(void *param); int main( int argc, char*argv[]) { pthread_t tid; pthread_attr_t attr; if(argc != 2){ fprintf(stderr,"usage : a.out<integer value>\n"); return -1; } if(atoi(argv[1])<0){ fprintf(stderr,"%d must be >= 0 \n",atoi(argv[1])); return -1; } pthread_attr_init(&attr); pthread_create(&tid,&attr,runner,argv[1]); pthread_join(tid,NULL); printf("Sum = :%d\n",sum); } void* runner(void *param){ int i , upper = atoi(param); sum = 0 ; for(i = 1; i < upper ; i++){ sum += i ; } pthread_exit(0); }
初遇问题
码完代码我就迫不及待的想要进行编译了,然而系统却提示给了我这样的问题。g++ -o bin/Debug/PThreadTest obj/Debug/main.o obj/Debug/main.o:在函数‘main’中: /home/mark/Code/C/PThreadTest/main.c:25:对‘pthread_create’未定义的引用 /home/mark/Code/C/PThreadTest/main.c:26:对‘pthread_join’未定义的引用 collect2: error: ld returned 1 exit status Process terminated with status 1 (0 minute(s), 0 second(s)) 0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
尝试着解决问题
看到了这样的提示,感觉有可能是Complier的问题吧。一开始我也是不理解到底是为什么会这样。然后我就在网上搜索了一下这些个关键字。网上的答案不一而足,说什么的都有。对于咱这种菜鸟级的入门新手而言,只能去尝试人家的解决方案。所以结果可想而知了,要么成功了,要么失败了。而一般后者出现的概率比较的多。第一种方式:改变编译器的路径,到setting–>complier–>link complier.然而这并没有解决我的问题,编译过之后,仍旧还是这搁错误
第二种方式:网上说Pthread并不是Linux的默认的库,连接时需要使用库libpthread.a。也就是在编译的时候 添加在*.c 文件的后面。这个方法在我的项目中,竟然成功的运行了。
gcc main.c -lpthread -o Main
总结
在遇到了这个问题的时候,从一开始的摸不着头脑,到慢慢的摸索着成功的道路,最后解决问题。我想这就是最基本的解决问题的方式吧。不是说解决问题了,就够了。而是在解决问题的过程中进行不断的思考,总结。这样在今后遇到类似的问题的时候,我们才能更加高效的区解决问题。编程之路比较的坎坷,脚踏实地的思考,才能最快的解决问题。
相关文章推荐
- Linux下多线程编程遇到的一些问题
- Linux查看当前网卡流量
- Linux下FTP服务器搭建
- Linux 常用命令
- Linux高级编程知识点(1)
- linux基础(二)
- 如何在 CentOS 7 上安装 Percona Server
- CentOS6.6服务器系统配置(LAMP+phpMyAdmin)全流程
- LINUX-iostat命令讲解
- linux下的pipe()管道函数
- ARM Linux 3.x的设备树(Device Tree)
- Linux 积累
- linux 下的 动态库加载函数总结
- linux下的fcntl()函数
- (linux)main.c中的初始化
- (linux)main.c中的初始化
- 01_linux下伪分布式环境搭建
- Linux下补丁的介绍及使用
- centos find
- linux su命令用法及详解