sem_open出错调试
未定义 文件中的符号 在文件中
sem_unlink /var/tmp//ccWFYSBB.o
err_quit /var/tmp//ccWFYSBB.o
sem_open /var/tmp//ccWFYSBB.o
sem_post /var/tmp//ccWFYSBB.o
sem_wait /var/tmp//ccWFYSBB.o
ld:致命的:符号参照错误、没有输出写到a.out
collect2: ld returned 1 exit status 能说的具体些吗?具体的调试一些什么应用。ld有问题。看看是不是动态库没有添加。
回复 #2 风之幻想 的帖子
这是一个小程序程序作用是让父子进程都给一个名为country的全局变量整数加1.上面这段是调试的信息,我又添加了#include <semaphore.h>这个库,但
还是不行。 估计你需要加上 -lsocket -lnsl
回复 #4 风之幻想 的帖子
这是源程序,帮忙看看吧"unpipc.h"是一个杂凑的头文件#include <sys/sem.h>
#include <synch.h>
#include <semaphore.h>
#include <sys/wait.h>
#include <errno.h>
#include "unpipc.h"
int count = 0;
int main(int argc, char** argv)
{
int i, nloop;
sem_t*mutex;
char* SEM_NAME = "mysem";
if(argc != 2){
err_quit("usage: incr1<#loops>");
}
printf("please input a number\n");
nloop = atoi(argv);
mutex = sem_open(SEM_NAME, O_CREAT | O_EXCL | FILE_MODE, 1);
sem_unlink(SEM_NAME);
setbuf(stdout, NULL);
if(fork() == 0){
for(i = 0; i < nloop; i++){
sem_wait(mutex);
printf("child: %d\n", count++);
sem_post(mutex);
}
_exit(0);
}
for(i= 0; i < nloop; i++){
sem_wait(mutex);
printf("parent: %d\n", count++);
sem_post(mutex);
}
exit(0);
} 你是用gcc编译的吗?如果是用gcc编译的加上这个。
比如这样:gcc -o cli cli.c -lsocket -lnsl
还用用户权限的问题。建议用root用户。
回复 #6 风之幻想 的帖子
我又像你说的那样用gcc编译编译了,还是过不去。我不是root用户,跟root用户没关系吧。
这是Unix网络编程的一个小程序 用gcc还是报同样的错误吗?
用gcc编译的时候加那些参数了吗?
还有,换一个操作系统,比如win下这段代码是否正常。
回复 #8 风之幻想 的帖子
这是《Unix网络编程》第二卷进程间通信的一个小程序,应该在Unix环境下可以运行吧。 原帖由 黑的人 于 2009-5-6 18:17 发表 http://bbs2.chinaunix.net/images/common/back.gif这是《Unix网络编程》第二卷进程间通信的一个小程序,应该在Unix环境下可以运行吧。
看来程序没有问题。估计,是编译器的选择上不合适。看来,gcc不行。估计需要在换一个c的编译器了。
页:
[1]
2