Linux下C编程与makefile模板详解

需积分: 0 1 下载量 97 浏览量 更新于2024-07-14 收藏 473KB PPT 举报
"这篇资源主要关注的是在Linux环境下进行C编程的相关知识,特别是关于makefile模板的使用。Makefile是构建、编译和链接C程序的重要工具,它定义了项目中的目标文件及其依赖关系,以及如何通过命令来更新这些目标。在Linux下,C编程涉及系统调用、库函数、GCC编译器、GDB调试器、ELF二进制格式等核心概念。此外,还提到了各种开发工具和脚本语言的使用,包括GCC、GDB、shell脚本(如bash)、Python等,以及IDE和编辑器的选择。" 在Linux环境下进行C编程,首先需要理解的是Makefile的工作原理。Makefile通常包含了一系列规则,每个规则定义了一个目标(target)和它的依赖项(prerequisites),以及如何更新目标的一系列命令(command)。例如: ``` target1: dep1 dep2 gcc -c source1.c -o target1.o target2: target1.o dep3 gcc target1.o dep3 -o target2 ``` 在这个例子中,`target1.o`依赖于`source1.c`和`dep1`, `dep2`,`target2`依赖于`target1.o`和`dep3`。通过运行`make`命令,它会自动检测依赖文件的改动并执行相应的编译和链接操作。 Linux系统调用是用户空间程序与操作系统内核交互的主要方式,它们提供了诸如打开文件、读写数据、创建进程等功能。库函数则是封装了这些系统调用,提供更易用的接口,例如`stdio.h`中的`printf()`函数就封装了底层的I/O系统调用。 GCC(GNU Compiler Collection)是Linux下常用的C编译器,它可以编译C、C++等多种语言。GDB(GNU Debugger)是强大的调试工具,用于检查和控制程序的执行,查找和修复错误。在开发过程中,通常使用`apt-get install build-essential`来安装必要的开发工具包,包括GCC和GDB。 除了C语言,Linux还支持多种脚本语言,如Shell(bash、csh、ksh)、Python、Perl、tcl/tk等,它们在自动化任务和快速脚本编写中非常有用。对于代码编辑和管理,有Emacs、xemacs、Eclipse、Kdevelop等IDE可供选择,还有vi/vim/gvim、emacs/xemacs等文本编辑器,以及源码阅读工具如ctags、etags、source navigator等。 在构建C程序时,还需要了解ELF(Executable and Linkable Format),这是Linux下可执行文件和共享库的标准格式,支持动态连接和重定位。二进制工具如`as`(汇编器)、`ld`(链接器)、`ar`(存档工具)在程序构建过程中也起着关键作用。 配置和构建工具,如automake、autoconf和m4,可以帮助自动化构建过程,确保软件能在不同的系统上正确编译。 Linux下的C编程是一个综合性的主题,涉及到编程语言、系统调用、编译器、调试工具、二进制格式、脚本语言、开发环境等多个方面,对程序员的技能和知识有较高的要求。

sudo make install Making install in libfcgi make[1]: Entering directory '/home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi' make[2]: Entering directory '/home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi' test -z "/home/yk/fcgi/lib" || mkdir -p -- "/home/yk/fcgi/lib" /bin/bash ../libtool --mode=install /usr/bin/install -c 'libfcgi.la' '/home/yk/fcgi/lib/libfcgi.la' /usr/bin/install -c .libs/libfcgi.so.0.0.0 /home/yk/fcgi/lib/libfcgi.so.0.0.0 (cd /home/yk/fcgi/lib && { ln -s -f libfcgi.so.0.0.0 libfcgi.so.0 || { rm -f libfcgi.so.0 && ln -s libfcgi.so.0.0.0 libfcgi.so.0; }; }) (cd /home/yk/fcgi/lib && { ln -s -f libfcgi.so.0.0.0 libfcgi.so || { rm -f libfcgi.so && ln -s libfcgi.so.0.0.0 libfcgi.so; }; }) /usr/bin/install -c .libs/libfcgi.lai /home/yk/fcgi/lib/libfcgi.la /usr/bin/install -c .libs/libfcgi.a /home/yk/fcgi/lib/libfcgi.a chmod 644 /home/yk/fcgi/lib/libfcgi.a arm-xilinx-linux-gnueabi-ranlib /home/yk/fcgi/lib/libfcgi.a ../libtool: line 6556: arm-xilinx-linux-gnueabi-ranlib: command not found /bin/bash ../libtool --mode=install /usr/bin/install -c 'libfcgi++.la' '/home/yk/fcgi/lib/libfcgi++.la' libtool: install: warning: relinking `libfcgi++.la' (cd /home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi; /bin/bash ../libtool --tag=CXX --mode=relink arm-xilinx-linux-gnueabi-g++ -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi -O2 -pipe -g -feliminate-unused-debug-types -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -o libfcgi++.la -lfcgi -rpath /home/yk/fcgi/lib fcgio.lo ) arm-xilinx-linux-gnueabi-g++ -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi -shared -nostdlib /home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/crti.o /home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/arm-xilinx-linux-gnueabi/8.2.0/crtbeginS.o .libs/fcgio.o -Wl,--rpath -Wl,/home/yk/fcgi/lib -L/home/yk/fcgi/lib -lfcgi -L/home/yk/sdk/sysroots/x86_64-petalinux-linux/usr/lib/arm-xilinx-linux-gnueabi/gcc/arm-xilinx-linux-gnueabi/8.2.0 -L/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/lib -L/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/arm-xilinx-linux-gnueabi/8.2.0 -L/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib -lstdc++ -lm -lc -lgcc_s /home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/arm-xilinx-linux-gnueabi/8.2.0/crtendS.o /home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/crtn.o -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-soname -Wl,libfcgi++.so.0 -o .libs/libfcgi++.so.0.0.0 ../libtool: line 4501: arm-xilinx-linux-gnueabi-g++: command not found libtool: install: error: relink `libfcgi++.la' with the above command before installing it Makefile:256: recipe for target 'install-libLTLIBRARIES' failed make[2]: *** [install-libLTLIBRARIES] Error 1 make[2]: Leaving directory '/home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi' Makefile:459: recipe for target 'install-am' failed make[1]: *** [install-am] Error 2 make[1]: Leaving directory '/home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi' Makefile:373: recipe for target 'install-recursive' failed make: *** [install-recursive] Error 1

2023-07-21 上传