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参数即可解决.
随机推荐
- QTableview 只显示横向线
#include <QApplication> #include <QTableWidget> #include <QPainter> #include <Q ...
- 玩得一手好注入之order by排序篇
看了之前Gr36_前辈在先知上的议题,其中有提到排序注入,这个在最近经常遇到这样的问题,所以先总结下order by 排序注入的知识. 0×00 背景 看了之前Gr36_前辈在先知上的议题,其中有提到 ...
- springMvc-入参对象
1.修改或者添加对象 2.多添件查询时候也会遇到 springMvc能够根据属性自动的封装pojo的对象并且支持关联的对象:大致的原理是在传入后台的时候把前台的属性和对象封装成json的形式传入后台, ...
- linux下修改apt下载源
很多时候使用apt install命令会出现Unable to fetch somearchives的错误,我们需要运行以下apt update,可是经常会出现下载速度很慢的情况 这里就记一下将apt ...
- 记一次pda(安卓)环境配置流程
将git项目git clone下来,接下来就是环境的配置 sdk,jdk,蓝牙插件,热更新 这个顺序 一.java JDK 安装及环境变量配置 https://blog.csdn.net/de ...
- POJ 2155 Matrix【二维树状数组+YY(区间计数)】
题目链接:http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissio ...
- java 线程状态图
- 【luogu P3384 树链剖分】 模板
题目链接:https://www.luogu.org/problemnew/show/P3384 诶又给自己留了个坑..不想写线段树一大理由之前的模板变量名太长 #include <cstdio ...
- 微软.net framework 源码学习
1. 直接下载.NET Framework源代码(下载地址),然后用Visual Studio打开查看. 2. 在线查看,网址:http://referencesource.microsoft.com ...
- 数据库——MySQL——权限管理
关于MySQL的权限管理,可以理解为是MySQL运行你做的事情.比如MySQL允许你执行select操作那么你就不能用update操作.如果你让你在某台机器上连接MySQL,那么你就不能在这个机器以外 ...