Linux下C编程与调试:从makefile到高级工具

需积分: 0 1 下载量 84 浏览量 更新于2024-07-14 收藏 473KB PPT 举报
"这篇文档主要关注的是在Linux环境下进行C编程的改进方法,特别是通过优化makefile来提高开发效率。Linux作为一款广泛使用的开源操作系统,为C编程提供了丰富的工具和库支持。在Linux下编程,程序员可以利用系统调用和库函数来实现各种功能。系统调用是操作系统提供给应用程序的直接接口,而库函数则封装了这些系统调用,使得编写代码更加方便。" Linux下编程概述: Linux提供了多种编程语言的支持,包括C/C++和Java等高级语言。其中,C语言因其低级特性和接近硬件的能力,常用于系统级编程。C++则是在C的基础上增加了面向对象的功能。在Linux下,ELF(Excutable and Linkable Format)是通用的二进制文件格式,它支持动态连接和重定位,使得程序的编译和链接更加灵活。 开发工具和环境: 开发C程序时,GCC(GNU Compiler Collection)是常用的编译器,它包含了C和C++的编译器。GDB(GNU Debugger)是强大的调试工具,用于查找和修复程序中的错误。使用`make`工具可以自动化构建过程,通过编写makefile来定义编译规则。在Linux中,安装`build-essential`套件可以获取基本的开发工具。此外,还有各种集成开发环境(IDE),如Emacs、Eclipse、Kdevelop等,以及源代码阅读器如ctags和etags,这些都极大地提高了开发效率。 系统调用与库函数: 在Linux中,程序员可以通过系统调用来直接与内核交互,例如进行文件操作、进程控制等。然而,直接使用系统调用往往复杂且易出错,因此通常会使用库函数,如glibc(GNU C Library),它提供了一层抽象,使得调用系统服务更为简洁。库函数还包含了许多额外的功能,如错误处理和性能优化。 脚本语言和开发辅助工具: 除了C/C++等编译型语言,Linux还支持多种脚本语言,如Shell(sh/bash/csh/ksh)、Python、Perl和tcl/tk等,它们在自动化任务和快速原型开发中发挥重要作用。此外,还有像xxd、sed和awk这样的二进制工具和文本处理工具,它们在程序开发过程中经常被用作辅助工具。 配置和构建工具: 在项目构建中,automake、autoconf和m4等工具帮助创建跨平台的配置系统,确保软件可以在不同环境下正确编译和运行。通过这些工具,开发者可以编写出更加模块化、可移植的makefile,使得项目维护和协作变得更加高效。 Linux为C编程提供了完善的生态环境,从开发工具到运行时支持,都有成熟的解决方案。通过改进makefile,可以优化构建流程,提高开发效率。理解并熟练掌握这些工具和概念,对于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 上传