apue第三版庫檔案編譯出錯問題解決

2021-08-18 18:02:06 字數 3063 閱讀 9862

最近看apue第三版

tar xvzf src.3e.tar.gz

cd apue.3e

make此時編譯完會提示有錯誤,此處解決方案來自 傻子豆餅的部落格

barrier.c:(.text+0x6e): undefined reference to `heapsort』

collect2: ld 返回 1

cd /home

wget

wget

rpm -ivh libbsd-0.6.0-3.el7.elrepo.x86_64.rpm

rpm -ivh libbsd-devel-0.6.0-3.el7.elrepo.x86_64.rpm

安裝成功後,會出現如下的資訊顯示:

此時所有的檔案都編譯通過,沒有錯誤資訊了。此外需要把兩個檔案複製到預設的地方

cp ./include/apue.h /usr/include/

cp ./lib/libapue.a /usr/local/lib/

接下來就可以練習書上的**了

這裡在開始1-3的ls時又會出現乙個新的錯誤提示

/tmp/cciznuly.o: in function `main':

1-3ls.cpp:(.text+0x20): undefined reference to `err_quit(char const*, ...)'

1-3ls.cpp:(.text+0x60): undefined reference to `err_sys(char const*, ...)'

這裡找到了 葉子一哥 的博文解決了問題附上機票—>>解決問題

因為apue.h是作者自定義的乙個標頭檔案,包括程式所需的常用標頭檔案及出錯處理函式。所以因該將它放入系統標頭檔案中(linux下是 /usr/include),這樣gcc編譯器就可以找到它了。所以先去作者提供**下的 suorce code 下 的src.2e.tar.gz包,然後解壓至電腦中的某個目錄,比如我的是在/home/***(你的登入名)/下,然後進入解壓目錄apue.2e,修改make.defines.linux中的wkdir=/home/***/apue.2e,為wkdir=/home/user/apue.2e,這就是我們將要make的工作目錄,然後再進入std目錄,用vi開啟linux.mk,將裡面的nawk全部改為awk

接下裡拷貝apue.h到系統預設頭檔案目錄中(這個目錄是/usr/include)

首先要先卻換到root使用者

然後把apue.2e/include下的apue.h拷貝到 /usr/include

執行下面的命令 #cp /home/***/apue.2e/include/apue.h /usr/include

回到ls.c檔案在的目錄執行程式

會出現下面的錯誤:

: undefined reference to `err_quit'

: undefined reference to `err_sys'

解決辦法:

因為err_quit跟err_sys是作者自己定義的錯誤處理函式,需要單獨定義標頭檔案

在/usr/include 下新建乙個名為myerr.h的檔案

#include "apue.h"

#include /* for definition of errno */

#include /* iso c variable aruments */

static void err_doit(int, int, const char *, va_list); /*

* nonfatal error related to a system call.

* print a message and return.

*/void

err_ret(const char *fmt, ...) /*

* fatal error related to a system call.

* print a message and terminate.

*/void

err_sys(const char *fmt, ...) /*

* fatal error unrelated to a system call.

* error code passed as explict parameter.

* print a message and terminate.

*/void

err_exit(int error, const char *fmt, ...) /*

* fatal error related to a system call.

* print a message, dump core, and terminate.

*/void

err_dump(const char *fmt, ...) /*

* nonfatal error unrelated to a system call.

* print a message and return.

*/void

err_msg(const char *fmt, ...) /*

* fatal error unrelated to a system call.

* print a message and terminate.

*/void

err_quit(const char *fmt, ...) /*

* print a message and return to caller.

* caller specifies "errnoflag".

*/static void

err_doit(int errnoflag, int error, const char *fmt, va_list ap)

編譯apue 第三版

想要直接使用作者提供的源 就需要編譯下,這個檔名是src.3e.tar.gz 很簡單的幾步就搞定了.解壓src.3e.tar.gz 進入apue.3e make 進入apue.3e lib目錄,複製libapue.a到 usr local lib目錄 進入 apue.3e include目錄,複製 ...

編譯原理第三版 作業一

編譯原理 1 解釋下列術語 源程式 源語言編寫的程式叫源程式。編譯程式 如果源語言為高階語言,目標語言為某台計算機上的組合語言或機器語言,則此翻譯程式稱為編譯程式 目標程式 目標語言書寫的程式稱為目標程式 編譯程式的前端 它由這樣一些階段組成 這些階段的工作主要依賴於源語言而與目標機無關。通常前端包...

UNIX環境高階程式設計第三版原始碼編譯

unix環境高階程式設計第三版原始碼編譯遇到的問題 一 問題描述 make,遇到錯誤 cannot find lbsd 二 原因 缺少缺少libbsd檔案。三 解決方法 yum install libbsd yum install libbsd devel 安裝完成後就可以去apue.3e目錄mak...