posts - 403, comments - 310, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

编译《UNIX环境高级编程》中的第一个程序

Posted on 2007-08-03 01:13 ZelluX 阅读(2223) 评论(2)  编辑  收藏 所属分类: C/C++
如果直接编译myls.c,会报错
/tmp/cceQcwN0.o: In function `main':
myls.c:(.text+0x24): undefined reference to `err_quit'
myls.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld 返回 1

需要下载随书附带的源代码并编译所需的库文件
源代码下载:http://www.blogjava.net/Files/zellux/apue.linux3.tar.Z.zip
(下载后去掉.zip后缀)

apue/README 文件中有具体的编译方法,对于Linux系统比较简单,进入lib.rhlin目录,然后运行make,就会在apue目录下生成libmisc.a,以后编译的时候连接这个库就行了。

以书中的第一个程序myls.c为例
#include <sys/types.h>
#include 
<dirent.h>

#include 
"ourhdr.h"

int main(int argc, char* argv[])
{
    DIR             
*dp;
    
struct dirent   *dirp;

    
if (argc != 2)
        err_quit(
"a single argument (the directory name) is required");

    
if ( (dp = opendir(argv[1])) == NULL)
        err_sys(
"can't open %s", argv[1]);

    
while ( (dirp = readdir(dp)) != NULL)
        printf(
"%s\n", dirp->d_name);

    closedir(dp);
    exit(
0);
}

$ gcc myls.c libmisc.a
出现几个Warning:
libmisc.a(strerror.o): In function `strerror':
strerror.c:(.text+0x18): warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
strerror.c:(.text+0xf): warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
看来这本书的确太老了
$ ./a.out .
就会列出当前目录下的所有文件


评论

# re: 编译《UNIX环境高级编程》中的第一个程序  回复  更多评论   

2008-02-20 22:25 by donnie0219
哥们儿,我也一样.

# re: 编译《UNIX环境高级编程》中的第一个程序  回复  更多评论   

2008-12-21 22:22 by fanzhiyong
http://www.apuebook.com/ 下载源码,并按照readme作,就没有你说的问题

只有注册用户登录后才能发表评论。


网站导航: