|
我(非程序员)是怎样自作聪明的
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?
因为我不肯继续混了,所以就来问大家啦 |
|