免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6259 | 回复: 12

sem_open出错调试 [复制链接]

论坛徽章:
0
发表于 2009-05-06 09:44 |显示全部楼层
未定义                  文件中的
符号                     在文件中
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

论坛徽章:
0
发表于 2009-05-06 10:01 |显示全部楼层
能说的具体些吗?具体的调试一些什么应用。ld有问题。看看是不是动态库没有添加。

论坛徽章:
0
发表于 2009-05-06 10:23 |显示全部楼层

回复 #2 风之幻想 的帖子

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

论坛徽章:
0
发表于 2009-05-06 15:47 |显示全部楼层
估计你需要加上 -lsocket   -lnsl

论坛徽章:
0
发表于 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[1]);

        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);
}

论坛徽章:
0
发表于 2009-05-06 16:52 |显示全部楼层
你是用gcc编译的吗?如果是用gcc编译的加上这个。
比如这样:gcc -o cli cli.c -lsocket -lnsl
还用用户权限的问题。建议用root用户。

论坛徽章:
0
发表于 2009-05-06 17:24 |显示全部楼层

回复 #6 风之幻想 的帖子

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

论坛徽章:
0
发表于 2009-05-06 17:42 |显示全部楼层
用gcc还是报同样的错误吗?
用gcc编译的时候加那些参数了吗?
还有,换一个操作系统,比如win下这段代码是否正常。

论坛徽章:
0
发表于 2009-05-06 18:17 |显示全部楼层

回复 #8 风之幻想 的帖子

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

论坛徽章:
0
发表于 2009-05-07 10:20 |显示全部楼层
原帖由 黑的人 于 2009-5-6 18:17 发表
这是《Unix网络编程》第二卷进程间通信的一个小程序,应该在Unix环境下可以运行吧。


看来程序没有问题。估计,是编译器的选择上不合适。看来,gcc不行。估计需要在换一个c的编译器了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP