当前位置: 技术问答>linux和unix
请问关于线程编程出错的问题
来源: 互联网 发布时间:2016-11-22
本文导语: 在j虚拟机linux下编写线程代码如下:(代码是在 UNIX环境高级编程 第二版 290页 相信挺多朋友看过这本书) [code=C/C][color=#FF0000++]#include"apue.h" #include[/color] pthread_t ntid; void printids(const char *s) { pid_t pid; p...
在j虚拟机linux下编写线程代码如下:(代码是在 UNIX环境高级编程 第二版 290页 相信挺多朋友看过这本书)
[code=C/C][color=#FF0000++]#include"apue.h"
#include[/color]
pthread_t ntid;
void printids(const char *s)
{
pid_t pid;
pthread_t tid;
pid=getpid();
tid=pthread_self();
printf("%s pid %u tid %u (0x%x)n",s,(unsigned int)pid,(unsigned int)tid,(unsigned int)tid);
}
void *thr_fn(void *arg)
{
printids("new thread:");
}
int main()
{
int err;
err=pthread_create(&ntid,NULL,thr_fn,NULL);
if(err!=0)
err_quit("cannot create thread:%sn",strerror(err));
printids("main thread:");
sleep(1);
exit(0);
}[/code]
编译的时候出现错误:
11-1.c:1:18 :apue.h 没有那个文件或目录11-1.c:in function 'printids'
11-1.c:9:'pid_t'undeclare (first use in this function)
11-1.c:9: (Each undeclared identifier is reported only once
11-1.c: for each functioin it appears in
11-1.c:9:parse error before "pid"
11-1.c:11:'pid' undeclared (first use in this funciton)
结果我把 #include"apue.h 删除,还是有问题
结果又添加 #include
结果还是产生错误:
:undefined referren to "pthread_create"
:undefined referren to "err_quit"
但是我已经用了 #include怎么会出现上面的错误呢?
请各位朋友帮忙回答,请指出应该怎么样修改才能得出正确的代码呢?在此先谢了
[code=C/C][color=#FF0000++]#include"apue.h"
#include[/color]
pthread_t ntid;
void printids(const char *s)
{
pid_t pid;
pthread_t tid;
pid=getpid();
tid=pthread_self();
printf("%s pid %u tid %u (0x%x)n",s,(unsigned int)pid,(unsigned int)tid,(unsigned int)tid);
}
void *thr_fn(void *arg)
{
printids("new thread:");
}
int main()
{
int err;
err=pthread_create(&ntid,NULL,thr_fn,NULL);
if(err!=0)
err_quit("cannot create thread:%sn",strerror(err));
printids("main thread:");
sleep(1);
exit(0);
}[/code]
编译的时候出现错误:
11-1.c:1:18 :apue.h 没有那个文件或目录11-1.c:in function 'printids'
11-1.c:9:'pid_t'undeclare (first use in this function)
11-1.c:9: (Each undeclared identifier is reported only once
11-1.c: for each functioin it appears in
11-1.c:9:parse error before "pid"
11-1.c:11:'pid' undeclared (first use in this funciton)
结果我把 #include"apue.h 删除,还是有问题
结果又添加 #include
结果还是产生错误:
:undefined referren to "pthread_create"
:undefined referren to "err_quit"
但是我已经用了 #include怎么会出现上面的错误呢?
请各位朋友帮忙回答,请指出应该怎么样修改才能得出正确的代码呢?在此先谢了
|
你的include 只是包含头文件,里面只是函数原型的声明
编译时需要链接库
gcc 1.c -lpthread
另外,err_quit函数是书中自己实现的,应该在附录B中,把它摘到你的程序中
编译时需要链接库
gcc 1.c -lpthread
另外,err_quit函数是书中自己实现的,应该在附录B中,把它摘到你的程序中
|
pthread.c:(.text+0x85):对‘pthread_create’未定义的引用
由于pthread库不是Linux系统默认的库,连接时需要使用库libpthread.a,所以在使用pthread_create创建线程时,在编译中要加-lpthread参数:
gcc -o pthread -lpthread pthread.c
上面说的很清楚了
由于pthread库不是Linux系统默认的库,连接时需要使用库libpthread.a,所以在使用pthread_create创建线程时,在编译中要加-lpthread参数:
gcc -o pthread -lpthread pthread.c
上面说的很清楚了
|
谢谢两位的回答
to justkk and ak_kay
修改后的代码如下
在终端上输入:(文件名改为xian.c)
gcc xian.c -lpthread
得出错误的提示:
to justkk and ak_kay
修改后的代码如下
在终端上输入:(文件名改为xian.c)
gcc xian.c -lpthread
得出错误的提示:
#include
#include"apue"
pthread_t ntid;
void printids(const char *s)
{
pid_t pid;
pthread_t tid;
pid=getpid();
tid=pthread_self();
printf("%s pid %u tid %u (0x%x)n",s,(unsigned int)pid,(unsigned int)tid,(unsigned int)tid);
}
void *thr_fn(void *arg)
{
printids("new thread:");
}
void err_quit(const char *fmt)
{
va_list ap;
va_start(ap,fmt);
err_doit(0,0,fmt,ap);
exit(1)
}
int main()
{
int err;
err=pthread_create(&ntid,NULL,thr_fn,NULL);
if(err!=0)
err_quit("cannot create thread:%sn",strerror(err));
printids("main thread:");
sleep(1);
exit(0);
}
|
把错误贴出来吧
|
apue.h 没有那个文件或目录
这个是作者自己写的一个类
你去包含他就没问题了
看书没看开头吧
这个是作者自己写的一个类
你去包含他就没问题了
看书没看开头吧
|
#include 试一下
|
网上有apue的需要的头文件和实现文件,去下载下来,编译例子的时候一并放进去
我记得好像好有个error.c(不知道是不是这个名字),编译时候.c文件也要一起编译
我记得好像好有个error.c(不知道是不是这个名字),编译时候.c文件也要一起编译
|
你不能只摘函数的实现啊,把人家的头文件一并包含..
看附录B中,那些err_打头的函数要求包含:
#include "apue.h"
#include /* for definition of errno */
#include /* ISO C variable aruments */
而apue.h的内容在附录B.1中
看附录B中,那些err_打头的函数要求包含:
#include "apue.h"
#include /* for definition of errno */
#include /* ISO C variable aruments */
而apue.h的内容在附录B.1中
|
UNIX环境高级编程 有很多都是作者自己写自己用的h和c文件,楼主得去网站上找来,书上有写的
|
我还特意翻了一下 觉得10L很有道理