LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 774|回复: 4

我(非程序员)是怎样自作聪明的:)

[复制链接]
发表于 2003-6-29 16:18:24 | 显示全部楼层 |阅读模式
我(非程序员)是怎样自作聪明的
gcc-3.2.3,glibc-2.3,linux-2.4.20编译portmap-5

cc  -DHOSTS_ACCESS -DCHECK_PORT  -DFACILITY=LOG_DAEMON  -DIGNORE_SIGCHLD            -O2    -c -o portmap.o portmap.c

cc  -DHOSTS_ACCESS -DCHECK_PORT  -DFACILITY=LOG_DAEMON  -DIGNORE_SIGCHLD            -O2    -c -o pmap_check.o pmap_check.c

cc  -DHOSTS_ACCESS -DCHECK_PORT  -DFACILITY=LOG_DAEMON  -DIGNORE_SIGCHLD            -O2    -c -o from_local.o from_local.c

cc  -DHOSTS_ACCESS -DCHECK_PORT  -DFACILITY=LOG_DAEMON  -DIGNORE_SIGCHLD            -O2    -c -o daemon.o daemon.c

cc  -DHOSTS_ACCESS -DCHECK_PORT  -DFACILITY=LOG_DAEMON  -DIGNORE_SIGCHLD            -O2    -c -o strerror.o strerror.c

cc  -DHOSTS_ACCESS -DCHECK_PORT  -DFACILITY=LOG_DAEMON  -DIGNORE_SIGCHLD
-O2  -o portmap portmap.o pmap_check.o from_local.o daemon.o strerror.o
-lwrap -lnsl

cc  -DHOSTS_ACCESS -DCHECK_PORT  -DFACILITY=LOG_DAEMON  -DIGNORE_SIGCHLD
-O2  -o portmap
portmap.o pmap_check.o from_local.o daemon.o strerror.o -lwrap -lnsl
strerror.o: In function `strerror':
strerror.o(.text+0x17): `sys_errlist' is deprecated; use `strerror' or
`strerror_r' instead
strerror.o(.text+0xe): `sys_nerr' is deprecated; use `strerror' or
`strerror_r' instead
portmap.o: In function `main':
portmap.o(.text+0xf2): undefined reference to `errno'
collect2: ld returned 1 exit status
make: *** [portmap] Error 1


我硬着头皮看了两眼portmap.c
......
extern int errno;
......
if (...)
                (void) fprintf(stderr, "portmap: fork: %s",strerror(errno));

我就想不通:

cc  -DHOSTS_ACCESS -DCHECK_PORT  -DFACILITY=LOG_DAEMON  -DIGNORE_SIGCHLD            -O2    -c -o portmap.o portmap.c通过
把源文件编译成目标文件没报错,链接目标文件时为什么又出毛病了呢?

心想,errno也就是个容错处理,不就是返回个错误代码嘛,通注释了去
结果,我哭,portmap根本不工作

我来到/lib下
nm libc-2.3.2.so |grep errno
发现这个库里有这个标志
于是就
cc  -DHOSTS_ACCESS -DCHECK_PORT  -DFACILITY=LOG_DAEMON  -DIGNORE_SIGCHLD
-O2  -o portmap portmap.o pmap_check.o from_local.o daemon.o strerror.o
-lwrap -lnsl -lc
结果仍旧
strerror.o: In function `strerror':
strerror.o(.text+0x17): `sys_errlist' is deprecated; use `strerror' or
`strerror_r' instead
strerror.o(.text+0xe): `sys_nerr' is deprecated; use `strerror' or
`strerror_r' instead
portmap.o: In function `main':
portmap.o(.text+0xf2): undefined reference to `errno'
collect2: ld returned 1 exit status
make: *** [portmap] Error 1

我混:Go on 浑也绝不Go home
vi portmap.c
在包含文件段加入
#include <errno.h>

然后
make
居然通过了

但我不敢肯定:
portmap.c 里的 外部整型变量errno是不是指/usr/include/errno.h里的errno?

因为我不肯继续混了,所以就来问大家啦
发表于 2003-6-29 16:35:25 | 显示全部楼层
>>在包含文件段加入
>>#include <errno.h>

正确。
发表于 2003-6-29 17:23:12 | 显示全部楼层
一般网上发布的软件除了测试版,都是经过测试的。应该不会发生这种问题呀。
发表于 2003-6-30 11:47:55 | 显示全部楼层
我上次遇到过一个没加include <stdio.h>。。呵呵
自由软件么,别太苛求
 楼主| 发表于 2003-7-1 10:48:16 | 显示全部楼层
嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表