Ubuntu20.04 编译运行apue.3e 避坑指南
生活随笔
收集整理的這篇文章主要介紹了
Ubuntu20.04 编译运行apue.3e 避坑指南
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前提說明:
這里的命令默認在apue.3e解壓文件夾目錄下運行。
報告權限不夠:
make[1]: 進入目錄“/home/cxs/code/apue.3e/lib” make[1]: execvp: ../systype.sh: 權限不夠 Makefile:6: ../Make.defines.: 沒有那個文件或目錄 make[1]: *** 沒有規則可制作目標“../Make.defines.”。 停止。 make[1]: 離開目錄“/home/cxs/code/apue.3e/lib” make: *** [Makefile:6:all] 錯誤 1解決辦法:chmod a+x systype.sh
./fixup.awk rot13a.c >xlate /bin/sh: 1: ./fixup.awk: Permission denied make[1]: *** [Makefile:18:rot13c2.c] 錯誤 126 make[1]: 離開目錄“/home/cxs/code/apue.3e/advio” make: *** [Makefile:6:all] 錯誤 1解決辦法:chmod a+x ./advio/fixup.awk
undefined reference to `major’
/usr/bin/ld: /tmp/ccmTGRc3.o: in function `main': devrdev.c:(.text+0xc5): undefined reference to `minor' /usr/bin/ld: devrdev.c:(.text+0xdb): undefined reference to `major' /usr/bin/ld: devrdev.c:(.text+0x128): undefined reference to `minor' /usr/bin/ld: devrdev.c:(.text+0x13e): undefined reference to `major' collect2: error: ld returned 1 exit status make[1]: *** [Makefile:18:devrdev] 錯誤 1 make[1]: 離開目錄“/home/cxs/code/apue.3e/filedir” make: *** [Makefile:6:all] 錯誤 1解決辦法:添加#include <sys/types.h>
提示 error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_flag’; did you mean ‘_flags’?
gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE buf.c -o buf -L../lib -lapue buf.c: In function ‘is_linebuffered’: buf.c:90:15: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘__pad’; did you mean ‘__pad5’?90 | #define _flag __pad[4]| ^~~~~ buf.c:104:13: note: in expansion of macro ‘_flag’104 | return(fp->_flag & _IOLBF);| ^~~~~ buf.c:105:1: warning: control reaches end of non-void function [-Wreturn-type]105 | }| ^ make[1]: *** [Makefile:16:buf] 錯誤 1 make[1]: 離開目錄“/home/cxs/code/apue.3e/stdio” make: *** [Makefile:6:all] 錯誤 1 gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE buf.c -o buf -L../lib -lapue buf.c: In function ‘is_linebuffered’: buf.c:99:13: error: ‘FILE’ {aka ‘struct _IO_FILE’} has no member named ‘_flag’; did you mean ‘_flags’?99 | return(fp->_flag & _IOLBF);| ^~~~~| _flags buf.c:100:1: warning: control reaches end of non-void function [-Wreturn-type]100 | }| ^ make[1]: *** [Makefile:16:buf] 錯誤 1 make[1]: 離開目錄“/home/cxs/code/apue.3e/stdio” make: *** [Makefile:6:all] 錯誤 1解決辦法:將./stdio/buf.c文件的
#ifdef _LP64 #define _flag __pad[4] #define _ptr __pad[1] #define _base __pad[2] #endif刪掉,同時將下面的flag全部換成flags:
int is_unbuffered(FILE *fp) {return(fp->_flags & _IONBF); }int is_linebuffered(FILE *fp) {return(fp->_flag & _IOLBF); }int buffer_size(FILE *fp) { #ifdef _LP64return(fp->_IO_buf_end - fp->_IO_buf_base); #elsereturn(BUFSIZ); /* just a guess */ #endif }#else#error unknown stdio implementation!#endif提示:/usr/bin/ld: 找不到 -lbsd
gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE badexit2.c -o badexit2 -L../lib -lapue -pthread -lrt -lbsd /usr/bin/ld: 找不到 -lbsd collect2: error: ld returned 1 exit status make[1]: *** [Makefile:31:badexit2] 錯誤 1 make[1]: 離開目錄“/home/cxs/code/apue.3e/threads” make: *** [Makefile:6:all] 錯誤 1解決辦法:sudo apt-get install libbsd-dev, 安裝所需要的文件庫
參考鏈接:
[1] https://stackoverflow.com/questions/19671152/usr-bin-ld-cannot-find-lbsd
[2] https://stackoom.com/question/3m0WZ/在ubuntu-中使用apue-e中的-make時-如何修復-struct-FILE-沒有名為-pad-的成員-錯誤
總結
以上是生活随笔為你收集整理的Ubuntu20.04 编译运行apue.3e 避坑指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]自动驾驶基础--路径规划
- 下一篇: GCC编译过程以及对应FILE文件表