黑的人 发表于 2009-05-06 09:44

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

风之幻想 发表于 2009-05-06 10:01

能说的具体些吗?具体的调试一些什么应用。ld有问题。看看是不是动态库没有添加。

黑的人 发表于 2009-05-06 10:23

回复 #2 风之幻想 的帖子

这是一个小程序程序作用是让父子进程都给一个名为country的全局变量整数加1.
上面这段是调试的信息,我又添加了#include      <semaphore.h>这个库,但
还是不行。

风之幻想 发表于 2009-05-06 15:47

估计你需要加上 -lsocket   -lnsl

黑的人 发表于 2009-05-06 16:38

回复 #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);
}

风之幻想 发表于 2009-05-06 16:52

你是用gcc编译的吗?如果是用gcc编译的加上这个。
比如这样:gcc -o cli cli.c -lsocket -lnsl
还用用户权限的问题。建议用root用户。

黑的人 发表于 2009-05-06 17:24

回复 #6 风之幻想 的帖子

我又像你说的那样用gcc编译编译了,还是过不去。
我不是root用户,跟root用户没关系吧。
这是Unix网络编程的一个小程序

风之幻想 发表于 2009-05-06 17:42

用gcc还是报同样的错误吗?
用gcc编译的时候加那些参数了吗?
还有,换一个操作系统,比如win下这段代码是否正常。

黑的人 发表于 2009-05-06 18:17

回复 #8 风之幻想 的帖子

这是《Unix网络编程》第二卷进程间通信的一个小程序,应该在Unix环境下可以运行吧。

风之幻想 发表于 2009-05-07 10:20

原帖由 黑的人 于 2009-5-6 18:17 发表 http://bbs2.chinaunix.net/images/common/back.gif
这是《Unix网络编程》第二卷进程间通信的一个小程序,应该在Unix环境下可以运行吧。

看来程序没有问题。估计,是编译器的选择上不合适。看来,gcc不行。估计需要在换一个c的编译器了。
页: [1] 2
查看完整版本: sem_open出错调试