1.代码

/*
* File: HeartPackageSendAgent.cpp
* Author: Pangxiaojian
*
*
* 主要实现:向服务器发送心跳包,每5s向服务器发送一个心跳包
* File: HeatPackageAgent.c
* Author: Pangxiaojian
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <net/if.h>
#include <sys/ioctl.h> #include <pthread.h>
#include <unistd.h>
#define MAXLINE 80
#define SERV_PORT 8000 const int HeatPort = ; //??
const char ServerIP[] = "192.168.18.128"; void getIPHost(char** iphost)
{
/*
int sock;
struct sockaddr_in sin;
struct ifreq ifr; sock = socket(AF_INET,SOCK_DGRAM,0);
int i;
int j;
for(i = 0; i<10;i++)
{
char* ENAME = (char*)malloc(5*sizeof(char));
bzero(ENAME,5);//
sprintf(ENAME,"%s%d",ETH_NAME,i);
strncpy(ifr.ifr_name,ENAME,IFNAMSIZ);
free(ENAME);
ifr.ifr_name[IFNAMSIZ - 1] = 0; if(ioctl(sock,SIOCGIFADDR,&ifr) >= 0)
goto HERE; } for(j = 0; j < 10; j++)
{
char* WNAME = (char*)malloc(6*sizeof(char));
bzero(WNAME, 6);
sprintf(WNAME, "%s%d", WTH_NAME, j);
strncpy(ifr.ifr_name, WNAME, IFNAMSIZ);
free(WNAME);
ifr.ifr_name[IFNAMSIZ - 1] = 0; if (ioctl(sock, SIOCGIFADDR, &ifr) >= 0)
goto HERE;
} */ int inet_sock;
struct sockaddr_in sin;
struct ifreq ifr;
inet_sock = socket(AF_INET,SOCK_DGRAM,);
strcpy(ifr.ifr_name,"eth0");
if(ioctl(inet_sock,SIOCGIFADDR,&ifr)>=)
{
perror("ioctl");
printf("%s\n",inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr));
goto HERE;
} HERE:
memcpy(&sin,&ifr.ifr_addr,sizeof(sin));
char* hostname = (char*)malloc(*sizeof(char));
bzero(hostname, );
gethostname(hostname, *sizeof(char));
char* ip = inet_ntoa(sin.sin_addr);
int lenhost = strlen(hostname);
int lenip = strlen(ip);
*iphost = (char*)malloc((lenhost+lenip+)*sizeof(char));
bzero(*iphost, (lenhost+lenip+)*sizeof(char));
sprintf(*iphost, "%s:%s", ip, hostname);
free(hostname); } int heart_send()
{
char send_buf[MAXLINE];
char recv_buf[MAXLINE];
char *iphost = NULL;
int sockfd = socket(AF_INET, SOCK_DGRAM, ); struct sockaddr_in cliaddr;//host
cliaddr.sin_family = AF_INET;
cliaddr.sin_addr.s_addr = inet_addr(ServerIP);//host ip
cliaddr.sin_port = htons(SERV_PORT); bind(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr)); getIPHost(&iphost); memcpy(send_buf,iphost,strlen(iphost));//heart packet while ()
{
struct sockaddr_in servaddr;
socklen_t servaddr_len = sizeof(servaddr); int count = recvfrom(sockfd, recv_buf, MAXLINE, , (struct sockaddr *)&servaddr, &servaddr_len); if (count < )
{
printf("recvfrom error");
continue;
}
printf("received msg is %s\n",recv_buf);
sendto(sockfd, send_buf, sizeof(send_buf), , (struct sockaddr *)&servaddr, sizeof(servaddr));
sleep(); }
close(sockfd);
//return ((void*)l); } int main()
{
pthread_t m_threadHeartSend;
int *ret_join = NULL;
if (pthread_create(&m_threadHeartSend, NULL, &heart_send, NULL) != )
return -;
pthread_join(m_threadHeartSend,(void*)&ret_join); }

2.编译命令为 gcc main.c -o test时,会出现如下错误

/tmp/ccCuKQ9a.o: In function `main':
client2_test.c:(.text+0x2ec): undefined reference to `pthread_create'
client2_test.c:(.text+0x30e): undefined reference to `pthread_join'
collect2: ld 返回 1

3.原因和解决方法

问题的原因:pthread不是linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败。

解决:在gcc编译的时候,附加要加 -lpthread参数即可解决。

试用如下命令即可编译通过

gcc main.c -o test -lpthread

4.参考链接

https://www.cnblogs.com/langzou/p/7364014.html

Linux下编译出现undefined reference to ‘pthread_create’问题解决的更多相关文章

  1. Linux 下编译出现 undefined reference to `pthread_create'

    这是由于没有链接线程库的原因,只要在编译的时候加入: -lpthread 参数即可. arm-linux-gcc serial.c -o serial -lpthread 查看 ubuntu 版本的命 ...

  2. Linux下undefined reference to ‘pthread_create’问题解决

    Linux下undefined reference to 'pthread_create'问题解决 在试用Linux 线程模块时,试用pthread_create 函数. 编译命令为 gcc main ...

  3. [转载]解决linux 下多线程错误 undefined reference to `sem_init'

    转自:https://blog.csdn.net/yzycqu/article/details/7396498?utm_source=copy 解决linux 下多线程错误 undefined ref ...

  4. Linux下undefined reference to ‘pthread_create’问题解决 zz

    接触了Linux系统编程中的线程编程模块,可gcc sample.c(习惯把书上的sample代码写进sample.c文件中)出现“undefined reference to ‘pthread_cr ...

  5. Linux+CLion+树莓派远程编译时,Cmake编译出现undefined reference to 'pthread_create'的解决办法

    在CLion中开发讯飞的linux语音库时编译出现以下问题: undefined reference to 'pthread_create' CLion的cmake配置:修改CMakeLists.tx ...

  6. undefined reference to `pthread_create'问题解决

    在编译pthread有关的程序时,出现undefined reference to `pthread_create'这样的错误. 问题原因: pthread 库不是 Linux 系统默认的库,连接时需 ...

  7. undefined reference to 'pthread_create'问题解决 -- 转

    文章出处:http://blog.csdn.net/llqkk/article/details/2854558 由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个 ...

  8. undefined reference to 'pthread_create'问题解决(转载)

    转自:http://blog.csdn.net/llqkk/article/details/2854558 由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子 ...

  9. [Linux] Linux下undefined reference to ‘pthread_create’问题解决

    问题的原因:pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中函数的入口地址,于是链接会失败. 解决:在gcc编译的时候,附加要加 -lpthread参数即可解决.

随机推荐

  1. QTableview 只显示横向线

    #include <QApplication> #include <QTableWidget> #include <QPainter> #include <Q ...

  2. 玩得一手好注入之order by排序篇

    看了之前Gr36_前辈在先知上的议题,其中有提到排序注入,这个在最近经常遇到这样的问题,所以先总结下order by 排序注入的知识. 0×00 背景 看了之前Gr36_前辈在先知上的议题,其中有提到 ...

  3. springMvc-入参对象

    1.修改或者添加对象 2.多添件查询时候也会遇到 springMvc能够根据属性自动的封装pojo的对象并且支持关联的对象:大致的原理是在传入后台的时候把前台的属性和对象封装成json的形式传入后台, ...

  4. linux下修改apt下载源

    很多时候使用apt install命令会出现Unable to fetch somearchives的错误,我们需要运行以下apt update,可是经常会出现下载速度很慢的情况 这里就记一下将apt ...

  5. 记一次pda(安卓)环境配置流程

    将git项目git clone下来,接下来就是环境的配置   sdk,jdk,蓝牙插件,热更新 这个顺序   一.java JDK 安装及环境变量配置 https://blog.csdn.net/de ...

  6. POJ 2155 Matrix【二维树状数组+YY(区间计数)】

    题目链接:http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissio ...

  7. java 线程状态图

  8. 【luogu P3384 树链剖分】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3384 诶又给自己留了个坑..不想写线段树一大理由之前的模板变量名太长 #include <cstdio ...

  9. 微软.net framework 源码学习

    1. 直接下载.NET Framework源代码(下载地址),然后用Visual Studio打开查看. 2. 在线查看,网址:http://referencesource.microsoft.com ...

  10. 数据库——MySQL——权限管理

    关于MySQL的权限管理,可以理解为是MySQL运行你做的事情.比如MySQL允许你执行select操作那么你就不能用update操作.如果你让你在某台机器上连接MySQL,那么你就不能在这个机器以外 ...