今天在学习了Linux的多线程编程的基础的知识点。于是就试着做了一个简单的Demo。本以为会得到预期的结果。不成想却遇到了意想不到的问题。


代码展示


我的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


总结


在遇到了这个问题的时候,从一开始的摸不着头脑,到慢慢的摸索着成功的道路,最后解决问题。我想这就是最基本的解决问题的方式吧。不是说解决问题了,就够了。而是在解决问题的过程中进行不断的思考,总结。这样在今后遇到类似的问题的时候,我们才能更加高效的区解决问题。

编程之路比较的坎坷,脚踏实地的思考,才能最快的解决问题。

最新文章

  1. Python全栈开发【基础四】
  2. cdh5.7权限测试示例
  3. java面试笔试
  4. Workspace Cloning / Sharing in Jenkins
  5. Oracle建表插数据等等
  6. SQLite.dll混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
  7. 算法-最长子序列和C/C++实现(三个复杂度)
  8. windows phone 7 通过Post提交URL到服务器,从服务器获取数据(比如登陆时候使用)
  9. 【LeetCode】29. Divide Two Integers
  10. django 富文本编辑器
  11. go等待N个线程完成操作总结
  12. 031、none和host网络的适用场景(2019-02-18 周一)
  13. Redis自学笔记:1.简介
  14. .net反编译的九款神器
  15. VS2015离线安装NuGet Package
  16. centos在图形界面和命令行之间切换的快捷键是什么?
  17. docker tomcat jvm 使用 visualVM监控
  18. 【论文阅读】Batch Feature Erasing for Person Re-identification and Beyond
  19. 二进制协议 vs 文本协议
  20. CTF之当铺密码

热门文章

  1. SpringBoot学习之自动依赖
  2. SpringBoot学习之mvc
  3. NVIDIA Titan Xp Star Wars Collector&#39;s Edition显卡深度学习工作站 + Ubuntu17.10 + Tensorflow-gpu + Anaconda3 + Python 3.6 设置
  4. Nginx 配置HTTPS 与Node.js 配置HTTPS方法
  5. Node.js 全局对象介绍
  6. centos7下git安装
  7. Docker内核能力机制
  8. Window下通过CuteFTP与Linux虚拟机连接失败的原因总结及解决方法
  9. Windows下使用Vim极简入门
  10. RunLoop总结:RunLoop的应用场景(五)