gcc/clang编译带pthread.h头文件的源码时需要的参数

2023-05-16

今天敲了一个小程序,编译时出现错误:undefined reference pthread_create 

原来由于pthread库不是Linux系统默认的库,连接时需要使用库libpthread.a,所以在使用pthread_create创建线程时,在编译中要加-lpthread参数:
gcc -o test -lpthread test.c

再查发现编译时参数写成 -pthread 也是可以的。

 

 


 * 经反复调试,此代码在多核环境下不安全,可能出现多个线程同时访问共享变量,
 * 即线程a将count读入操作,还未写回时刻,线程b也对count进行操作,则先完成
 * 操作的线程操作无效。
 * 后来发现,原来此不安全是因为,我写的函数是不可重入函数。 *

#include <stdio.h> #include <pthread.h> #include <stdlib.h> #define NUMBER_OF_THREADS 10 int static count = 0; void *print_hello_world(void *tid) { pthread_yield(NULL); printf ("Hello world. Greetings from thread %lu\t%d\n",pthread_self(),(int)tid); //long可以转换成int类型 count++; pthread_exit(NULL); } int main(int argc, char **argv) { pthread_t threads[NUMBER_OF_THREADS]; int status, i; for(i = 0; i < NUMBER_OF_THREADS; i++) { printf ("Main here. Creating thread %d\n",i); status = pthread_create(&threads[i], NULL, print_hello_world,(void*)(long)i); //64位机子 int转指针类型会告警,故先转为long(64位)与指针位数相等 if(status != 0) { printf ("Oops. pthread_create returned error code %d\n",status); exit(-1); } } for(i = 0; i < NUMBER_OF_THREADS; i++) { pthread_join(threads[i], NULL); printf ("Thread %d ended!\n",i); } printf ("count=%d\n",count); return 0; }

 

xcode 中出现 Implicit declaration of function 'xxxx' is invalid in C99” 警告的解决办法

该警告明确告诉我们在C99的规范中,不允许出现隐含声明的用法。这是C99规范中增加的规则,不过即便不遵守此规则,也仅仅是一个警告而已。


什么是隐含声明呢,也很简单,就是你调用函数的c文件中,没有正确包含对应的头文件。一般来说,c,c++都会将类,函数,的声明放在头文件中,这样在需要的时候包含对应头文件就可以了,在编译器的前期处理中,需要通过头文件来建立一些函数,变量,类的表,如果调用到了声明中没有的函数,编译器会认为是有危险的,显而易见,如果直接调用函数,在运行期间会出现程序异常。


因此强烈建议大家不要忽略这个警告,更不要象个别文章建议的那样把编译环境配置成C89,这样隐患依然存在。


看来在解决这些警告之前,还是多了解一下C89, C99这些语言标准比较好。

 

转载于:https://www.cnblogs.com/BinBinStory/p/7781823.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc/clang编译带pthread.h头文件的源码时需要的参数 的相关文章

  • mysql在linux下的my.cnf文件在哪里!

    用rpm包安装的MySQL是不会安装 etc my cnf文件的 xff0c 至于为什么没有这个文件而MySQL却也能正常启动和作用 xff0c 在点有两个说法 xff0c 第一种说法 xff0c my cnf只是MySQL启动时的一个参数
  • shell后台并发执行的最佳实践

    一 shell如何在后台执行 1 nohup命令 通常我们都是远程登录linux终端 xff0c 而当我们退出终端时在之前终端运行的程序都会终止 xff0c 有时候先想要退出终端也要程序继续执行这时nohup就登场了 nohup命令 可以将
  • 任意输入10个数,找出最大数和最小数。

    任意输入10个数 找出最大数和最小数 span class token macro property span class token directive keyword include span span class token stri
  • 如何在 Chromebook 上启用开发者模式

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【C语言】实现 atoi 函数

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【C语言】字符串合集

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 线程上下文切换和进程上下文切换的区别

    进程切换分两步 1 切换页目录以使用新的地址空间 2 切换内核栈和硬件上下文 对于linux来说 xff0c 线程和进程的最大区别就在于地址空间 对于线程切换 xff0c 第1步是不需要做的 xff0c 第2是进程和线程切换都要做的 所以明
  • 【Ubuntu】解决 Could not get lock /var/lib/dpkg/lock-frontend

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【Ubuntu】解决 error: dpkg frontend is locked by another process

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【OpenCV】关于Vec3b类型的含义与使用

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【Java】文件读写和输入输出

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【剑指Offer】题3:数组中重复的数字

    写在前面的话 xff1a 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查证后会进
  • 【C语言】关于遍历字符串的三种方法

    写在前面的话 xff1a 1 版权声明 xff1a 本文为博主原创文章 xff0c 转载请注明出处 xff01 2 博主是一个小菜鸟 xff0c 并且非常玻璃心 xff01 如果文中有什么问题 xff0c 请友好地指出来 xff0c 博主查
  • 逻辑地址、虚拟地址、物理地址以及内存管理

    本文涉及的硬件平台是X86 xff0c 如果是其它平台 xff0c 嘻嘻 xff0c 不保证能一一对号入座 xff0c 但是举一反三 xff0c 我想是完全可行的 1 概念 物理地址 physical address 用于内存芯片级的单元寻
  • 为 CentOS 配置网络

    用桥接方式给CentOS配置网络 xff0c 这里我使用的是CentOS 6 5 第一步 点开虚拟机的设置 xff0c 网络连接选择桥接方式 xff0c 其他勾选按照下图 xff0c 如下图做相关的设置 xff1a 第二步 打开网络连接 x
  • 32位 idea启动出现“could not find main class com/intellij/idea/Main“错误解决方法

    idea启动出现 could not find main class com intellij idea Main 错误的解决方法 32位环境下安装idea及解决could not find main class com intellij
  • java实现获取两个list交集

    如何获取两个list的交集 xff0c 使用java8 的stream实现非常容易 java流实现 创建两个字符串list xff0c 两者都有重复的元素 xff1a List lt String gt list 61 Arrays asL
  • shell中$(( ))与$( )还有${ }的区别

    与 96 96 反引号 在bash shell中 xff0c 与 96 96 反引号 都是用来做命令替换 command substitution 用的 echo the last sunday is date d 34 last sund
  • apache 的网页内容显示是乱码

    apache 的网页内容显示是乱码 非常感觉下面各位的回答 xff0c http forum ubuntu org cn yaoms etcte HuntXu sevk shellex http linux chinaunix net ma
  • 字母及数字上标下标

    字母及数字上标下标 欢迎使用新的改变 欢迎使用 常用上标 常用下标 更多上标

随机推荐

  • 构造矩阵乘最优解

    void bracket int i int j if i 61 61 j cout lt lt 34 M 34 lt lt i else cout lt lt 34 34 int k 61 K i j bracket i k 1 brac
  • vs2012 出现LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”问题

    首先 xff0c 我是在已经安装了vs2010的基础上安装的vs2012 xff0c 测试安装的时候发现最基本的helloworld程序都通不过 xff0c 出现LINK fatal error LNK1104 无法打开文件 kernel3
  • SerDes知识详解

    一 SERDES的作用 1 1并行总线接口 在 SerDes流行之前 芯片之间的互联通过 系统同步或者源同步的并行接口传输数据 图 1 1 演示了系统和源同步并行接口 随着接口频率的提高 xff0c 在系统同步接口方式中 有几个因素限制了有
  • enum : C#中的枚举类型,原来有这么多用法

    今天来的时候打开了MSDN扫了一眼C 里的枚举类型 蓦然发现这东西还有些新玩法 首先是简单介绍 xff0c 在此略过 因为enum用法很简单么 定义一个简单的枚举类型 xff1a enum Days Sat Sun Mon Tue Wed
  • ubuntu下安装cuDNN

    正确的安装cuDNN方式 xff0c 其实跟着官方安装说明进行安装就可以了 1 从https developer nvidia com cudnn上下载cudnn相应版本的压缩包 xff08 需要注册或登录 xff09 下载cuda对应版本
  • 面向对象(3)

    私有权限 封装的意义 xff1a 将属性和方法放到一起做为一个整体 xff0c 然后通过实例化对象来处理 xff1b 隐藏内部实现细节 xff0c 只需要和对象及其属性和方法交互就可以了 xff1b 对类的属性和方法增加 访问权限控制 私有
  • 【vnc远程桌面】未联网状态下使用离线包配置vnc

    系统为ubuntu18 04 amd64版本 本教程使用vino配置远程服务器 首先 xff0c 离线安装vino包后远程传输给待控制服务器 xff1a sudo apt update sudo apt get download apt c
  • 7.用选择排序法对一个数组进行排序。

    include lt stdio h gt define N 5 void datesort int a int i j k temp for i 61 0 i lt N 1 i 43 43 k 61 i for j 61 i 43 1 j
  • error while loading shared libraries: xxx.so.x"错误的原因和解决办法

    一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误 比如 tmux error while loading shared libraries libevent 1 4 so 2 cannot open shared o
  • Linux终端进度条显示进程执行进度

    在Linux执行费时操作 xff08 如tar xff09 时显示进度条 xff0c 以不至于让用户觉得程序卡死了 效果 文本进度条 结束后 xff1a 图形化字符进度条 文本进度条怎么做 进度条实现 网上有一些老六会说要下载一些工具 xf
  • 判断页面相似度的python实现

    判断页面相似度的python实现 xff1a 两天时间实现了一小部分 xff0c 大量其实是xpath解析以及字符串和文件操作 xff0c 性能还需要改善 xff0c 下面说一下步骤 xff1a 动态获取DOM树结构 xff1a 因为主要是
  • Win10下VScode+MSVC+CMake搭建C++开发环境

    最近工作需要大规模C 43 43 开发 xff0c 以往都是使用Visual Studio xff08 以下简称VS xff09 xff0c 虽然VS是一款很强大的IDE xff0c 但也同样带来过于庞大 xff0c 运行卡顿等问题 xff
  • iOS 表视图

    基本概念 1 表头视图 xff08 table header view xff09 表视图最上边的视图 xff0c 用于展示表视图的信息 2 表脚视图 xff08 table footer view xff09 表视图最下面的视图 xff0
  • ISBN从10到13位的算法

    图书的ISBN有两种编码 xff0c 一种长度是10位的 xff0c 另一种是13位的 两者其实是可以用特定的算法相互推导的 xff0c 关键在于最后一位校验码的计算 1 10位到13位 10位的isbn编号是7111165616 xff0
  • 阿里云服务器(ECS)实战--安全组策略配置(端口放行)

    什么是阿里云安全组策略 xff1f 阿里云安全组是一种虚拟防火墙 也是阿里云处于安全考虑的一种策略 一台ECS云服务器实例必须至少属于一个安全组 我们知道服务器的各种服务要依赖端口来实现 我们可以将安全组想象成服务器各个端口的开关 默认创建
  • 字符串的排序(全排序)

    一 前言 剑指Offer 中题38 二 题目 输入一个字符串 xff0c 打印出该字符串中字符的所有排列 例如 xff0c 输入字符串abc xff0c 则打印出由字符a b c所能排列出来的所有字符串abc xff0c acb xff0c
  • 自己总结的一些c语言概念 练习题

    c语言的一些基础概念 局部变量的作用域为局部变量所在的局部范围 xff0c 局部变量优于全局变量 举例如下 xff1a span class token keyword int span num span class token opera
  • iOS本地搜索(谓词)

    Use Code 默认搜索 64 param fieldArray 搜索字段数组 64 param inputString 输入文字 64 param array 搜索数据源 64 return 搜索结果 NSArray searchWit
  • zabbix 发送邮件和短信的脚本

    对接sms和监控的脚本 xff0c 其实原理很简单 xff0c zabbix会通过参数的方式传送给脚本三个参数 1 user 2 subject 3 message body 然后通过curl 通过get的方式提交网页就ok了 bin ba
  • gcc/clang编译带pthread.h头文件的源码时需要的参数

    今天敲了一个小程序 xff0c 编译时出现错误 xff1a undefined reference pthread create 原来由于pthread库不是Linux系统默认的库 xff0c 连接时需要使用库libpthread a 所以