MacOS|解决《UNIX环境高级编程》的头文件apue.h找不到的问题

一、前言


在这里插入图片描述
学习《UNIX环境高级编程》的所有例程代码之前,必须先解决头文件apue.h的问题。头文件apue.h几乎在整本书的所有程序上都出现了。

思路大概是这样的:

1、首先从官网下载的源代码上找到apue.h与error.c,接着稍微修改一下apue.h。
2、gcc编译器在MacOS系统下的头文件路径在哪里。

废话不说,开始解决这个问题吧。

二、下载与修改apue.h文件


2.1、官网http://www.apuebook.com/apue3e.html

在这里插入图片描述进入官网后,找到Source Code。
在这里插入图片描述
找到download here,下载并解压源代码src.3e.tar.gz

2.2、源代码apue.3e

在这里插入图片描述
在这里插入图片描述

2.3、修改apue.h文件

在这里插入图片描述

三、gcc编译器的头文件路径


在这里插入图片描述

echo | gcc -v -x c -E -

从上图看到,gcc编译器的include <…> 头文件的搜索路径有4个。从我的实验看来,选择第三个就可以了。所以后续只需要将apue.h与error.c文件放入Mac OS根目录下的/Library/Developer/CommandLineTools/usr/include

扫描二维码关注公众号,回复: 14267447 查看本文章

四、将apue.h与error.c复制过去


在这里插入图片描述
首先,打开Mac的终端,使用cd指令进入目录/Library/Developer/CommandLineTools/usr/include
在这里插入图片描述
使用sudo cp指令将apue.h与error.c复制到目录/Library/Developer/CommandLineTools/usr/include
接着,使用ls -l指令查看apue.h与error.c是否真的被复制过去。

五、编译例程代码


5.1、1-4的代码

#include <apue.h>
#include <errno.h>

#define BUFFSIZE 4096

int
main()
{
    
    
    int n;
    char buf[BUFFSIZE];

    while((n = read(STDIN_FILENO,buf,BUFFSIZE)) > 0)
    {
    
    
        if(write(STDOUT_FILENO,buf,n) != n)
        {
    
    
            err_sys("write error");
        }
    }

    if(n < 0)
    {
    
    
        err_sys("read error");
    }

}

5.2、使用gcc编译代码,并执行代码

在这里插入图片描述
1-4例程的代码目的是在终端里输入字符串,终端就会返回字符串。比如输入字符串”hello,world”,接着终端就会输出字符串”hello,world”。

猜你喜欢

转载自blog.csdn.net/wallace89/article/details/124956235