最近看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...