Linux下编译出现undefined reference to ‘pthread_create’问题解决
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': |
3.原因和解决方法
问题的原因:pthread不是linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败。 解决:在gcc编译的时候,附加要加 -lpthread参数即可解决。 试用如下命令即可编译通过
|
4.参考链接
https://www.cnblogs.com/langzou/p/7364014.html |
Linux下编译出现undefined reference to ‘pthread_create’问题解决的更多相关文章
- Linux 下编译出现 undefined reference to `pthread_create'
这是由于没有链接线程库的原因,只要在编译的时候加入: -lpthread 参数即可. arm-linux-gcc serial.c -o serial -lpthread 查看 ubuntu 版本的命 ...
- Linux下undefined reference to ‘pthread_create’问题解决
Linux下undefined reference to 'pthread_create'问题解决 在试用Linux 线程模块时,试用pthread_create 函数. 编译命令为 gcc main ...
- [转载]解决linux 下多线程错误 undefined reference to `sem_init'
转自:https://blog.csdn.net/yzycqu/article/details/7396498?utm_source=copy 解决linux 下多线程错误 undefined ref ...
- Linux下undefined reference to ‘pthread_create’问题解决 zz
接触了Linux系统编程中的线程编程模块,可gcc sample.c(习惯把书上的sample代码写进sample.c文件中)出现“undefined reference to ‘pthread_cr ...
- Linux+CLion+树莓派远程编译时,Cmake编译出现undefined reference to 'pthread_create'的解决办法
在CLion中开发讯飞的linux语音库时编译出现以下问题: undefined reference to 'pthread_create' CLion的cmake配置:修改CMakeLists.tx ...
- undefined reference to `pthread_create'问题解决
在编译pthread有关的程序时,出现undefined reference to `pthread_create'这样的错误. 问题原因: pthread 库不是 Linux 系统默认的库,连接时需 ...
- undefined reference to 'pthread_create'问题解决 -- 转
文章出处:http://blog.csdn.net/llqkk/article/details/2854558 由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个 ...
- undefined reference to 'pthread_create'问题解决(转载)
转自:http://blog.csdn.net/llqkk/article/details/2854558 由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子 ...
- [Linux] Linux下undefined reference to ‘pthread_create’问题解决
问题的原因:pthread不是Linux下的默认的库,也就是在链接的时候,无法找到phread库中函数的入口地址,于是链接会失败. 解决:在gcc编译的时候,附加要加 -lpthread参数即可解决.
随机推荐
- 使用mysql5.7新特性解决前通配符查询性能问题
众所周知,在mysql里的后通配符可以使用索引查找,前通配查询却无法使用到索引,即使是使用到了索引,也是使用了索引全扫描,效率依然不高,再MySQL5.7之前,一直都没有好的办法解决,但是到了MySQ ...
- Oracle分析函数列表分享
SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG ...
- JavaScript获取当前网页的源码
通过 outerHTML document.documentElement.outerHTML 通过异步请求 $.get(window.location.href,function(res){ con ...
- day2-基础 变量,判断,循环
1.第一个程序 print ("Hello World!") 输出: 1 Hello World 2.第一个变量 a = ( print (a) 输出: Hello World 3 ...
- 如何杀掉一个用户下的所有进程并drop掉这个用户
如何杀掉一个用户下的所有进程并drop掉这个用户 Copy the sample code below into a file named kill_drop_user.sql.Open SQL*Pl ...
- June 01st 2017 Week 22nd Thursday
Do what you say, say what you do. 做你说过的,说你能做的. Do what I have said, live up to my promise, answer th ...
- March 30 2017 Week 13 Thursday
I learned the value of hard work by working hard. 只有真的努力了,才会知道努力的价值. On the day, March 12th 2017, I ...
- HDU 5258 数长方形【离散化+暴力】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5258 数长方形 Time Limit: 2000/1000 MS (Java/Others) Me ...
- 如何从GitHub获取源代码
如何从GitHub获取源代码 github是当前流行的开源项目托管网站,里面有成千上万的项目值得学习和借鉴,可以把项目源代码下载到本地研究.本文介绍如何获取github的源代码. 方法1 - 克隆(C ...
- 解决Sublime Text乱码问题
第一步:安装Package Control 大家如果是在官网下载的Sublime Text 3,那么首先需要安装一个 Package Control包,这是一个用来安装其他插件的包,不管装什么插件,首 ...