`

Linux下C和C++开发基础

阅读更多
Linux下C和C++开发基础 作者 阿江 日期 2009-3-23 4:57:00

基本编程概念
n 编程语言:C 、C++
n 编译(compile):源文件(.c)->目标文件(.o)
n 连接(link):目标文件(.o)->可执行文件
n 库(library):静态连接库(.a)、动态连接库(.so)

Linux下开发工具
n编辑器:vi、emacs、窗口编辑器
n编译器:GCC
n调试器:GDB
n可执行文件工具:Binutils
n连接器:ld
n汇编程序:as
n库管理工具:ar
n可执行文件符号管理:nm
n显示可执行文件信息:objdump

简单程序示例(C语言):
n hello.c
/***************************
#i nclude <stdio.h>
int main(int argc,char **argv)
{
printf("HelloWorld!\n");
return 0;
}
/***************************
n编译方法:gcc –o hello hello.c
n运行方法:./hello
简单程序示例(C++语言):

n hello.cpp
/*******************************
#i nclude <iostream>
using namespace std;
int main(int argc,char **argv)
{
cout << "Hello World!“ << endl;
return 0;
}

/*******************************
n 编译方法:g++ –o hello hello.cpp
n 运行方法:./hello
GCC编译器
n GNU平台下主流编译器
n目前最新稳定版4.0
n官方网站:http://gcc.gnu.org
n支持编译语言:C、C++、Objective-C、
Objective-C++、Java、Fortran、Ada
n跨平台支持:支持几乎所有主流操作系统,如
Linux、UNIX、Windows等。支持多种硬件平
台,如X86、ARM、PPC、MIPS等
n交叉编译功能

编译相关文件路径
n头文件
n一般在/usr/include目录下
n库文件
n一般在/lib、/usr/lib目录下
n某些库在其他目录下,如X Window相关库一般在
/usr/X11R6/lib目录下
n编译器、连接器核心文件
n一般在/usr/lib/gcc-lib/<target>/<version>目录下

Linux下函数库
n静态库(.a)和动态库(.so)
n库命名:lib开头,库版本号
n库链接
n标准库:
n动态加载库:ld-linux.so(/lib)
n标准C库:libc.so(/lib)
n标准C++库:libstdc++.so(/usr/lib)
n数学库:libm.so(/lib)

GCC使用用法
n基本用法:
n gcc [options] file…
n示例:gcc –o hello hello.c,编译hello.c为可执行文件
hello(自动连接标准C库libc.so)
n示例:gcc –o hello hello.c –lm,编译hello.c为可执行
文件hello,连接数学库libm
n示例:g++ -o hello hello.cpp,编译hello.cpp为可执行
文件hello,自动连接标准C++库libstdc++.so

GCC常用选项
-v :显示gcc版本信息及其相关信息
n示例:gcc -v
n可用于查看gcc核心文件信息及其编译配置选项
n -o:生成可执行文件名
n示例:gcc -o hello hello.c
n -c:仅编译成中间目标文件(.o),不连接
n示例:gcc -c hello.c,将生成hello.o
n -S:由源程序生成汇编文件(.s)
n示例:gcc -S hello.c,将生成hello.s
-E:对源程序仅进行预处理,输出到标准输出上(可
用于分析预处理如define的问题)
n 示例:gcc -E hello.c> hellop.c
n -I:指定头文件所在路径
n 示例:gcc -Iinclude -o hello hello.c
n -L:指定库文件所在路径
n 示例:gcc –o hello hello.c -Llib -ltest
n -l:指定连接的库文件
n 示例:同上
n -D:定义宏
n 示例:gcc -D DEBUG=3 -o hello hello.c
-On:代码优化选项,以产生更小和更快的目标代码,
n表示优化级别,如-O1,-O2,-O3等
n 示例:gcc -O2 -o hello hello.c
n -m<arch>:针对特定处理器的优化,如-m386,-m586等
n 示例:gcc -m586 -o hello hello.c
n -g:产生调试代码,用于gdb调试工具
n 示例:gcc -g -o hello hello.c
n -pg:产生用于性能测试的附加信息,供gprof程序使用
n 示例:gcc -pg -o hello hello.c
n -Wall:显示所有警告信息
n 示例:gcc -Wall -o hello hello.c




GNU调试工具gdb
n基本功能:
n设置断点,暂停程序执行
n监视运行状态下变量值
n单步执行代码
n汇编、反汇编
n调试信息
n源程序编译时加上-g选项,保证目标程序内含调试
信息,方便gdb调试时显示代码行、变量名等。


GDB调试示例程序test.c
#i nclude <stdio.h>
int main()
{
int i,j;
j=0;
for(i=0;i<10;i++)
{
j+=2;
printf(“j=%d\n”,j);
}
}
GDB调试命令
n 编译:gcc -g -o test test.c
n 运行gdb:gdb test
n gdb命令:
n help:可查看gdb命令帮助
n gdb命令可采用缩写,如list可缩写为l
n 列出源文件:list
n 设置断点:break
n 示例:break 6,在第6行设置断点
n 示例:break <filename>:<linenum>,在特定源文件的特定行设置断点
n 示例:break <>,在函数上设置断点
n 示例:break *<address>,在特定地址上设置断点
n 运行:run,在断点处程序暂停

GDB调试命令
n 打印变量值:print,printf
n 示例:print i,打印变量i的值
n 示例:print i=10,将变量i赋值为10
n 示例:printf “0x%x\n”,j+20,按格式打印变量值
n 设置表达式观察点:awatch、watch
n 功能:awatch当变量被读写时暂停程序运行,watch当变量发生改变时暂停程序运行
n 示例:awatch j,当j发生改变时暂停运行,显示原值和新值;j被读时显示当前值
n 继续运行:continue
n查看当前断点:info break
n清除断点:clear
n示例:clear 6,清除第6行设置的断点
n删除断点:delete
n示例:delete 2,删除编号为2的断点
n屏蔽断点:disable
n示例:disable 2,暂时使编号为2的断点失效
n激活断点:enable
n示例:enable 2,重新激活编号为2的断点
n条件断点:
n示例:break 8 if j==8,每执行到第8行检测j的值,如果j=8则程序暂停
n其他断点命令:
n ignore:忽略断点特定次数
n tbreak:设置临时断点,仅执行一次
n单步运行:step,跟踪到函数内部
n单步运行:next,不跟踪到函数内部
n显示表达式值:display,每运行到断点均显示值
n显示display的表达式:info display
n删除display的表达式:delete display <编号>
n设置变量值:set variable
n示例:set variable i=8
n打印当前堆栈信息:backtrace
n设置运行时参数:set args
n源程序编译时-l选项可自动连接相应动态库
n查看目标文件使用的动态库ldd
n示例:ldd hello
n动态库路径
n默认/lib,/usr/lib
n由/etc/ld.so.conf指定
n ldconfig程序根据/etc/ld.so.conf重建动态库cache
n ld-linux.so动态库负责完成动态链接
n环境变量LD_LIBRARY_PATH

n全称:executable and linkable format
n目标文件:可重定位文件(relocatable,.o),可执行文件,静态库,动态库等
n ELF文件组成
n文件头ELF header
n程序段,典型的段.text(代码段)、.bss(未初始化的数据段)、.data(初始化的数据段)
n重定位和位置无关代码(PIC)

二进制文件工具binutils
n 用于查看和操作二进制文件
n 包含工具:
n 连接器:ld
n 汇编器:as
n 转换地址到源程序行:addr2line
n 建立、修改函数库:ar
n 列出目标文件的符号表:nm
n 目标文件转换和拷贝:objcopy
n 显示目标文件信息:objdump
n 删除目标文件中的符号表:strip
n 显示elf文件信息:readelf

二进制文件工具使用示例
n查看目标文件基本信息
n示例:readelf –h hello
n查看目标文件中的符号
n示例:nm hello
n查看目标文件中的段信息
n示例:objdump –h hello
n反汇编目标文件
n示例:objdump –d hello
n删除目标文件中的符号,减小文件大小
n示例:strip hello
n显示可执行文件中的常量串
n示例:strings hello

编程帮助
n man:用于查看标准命令、系统调用和函数库等的用法
n示例:man sleep(查看标准命令sleep)
n示例:man 3 sleep(查看函数sleep的用法)
n Info:查看命令用法,类似Web页面
n示例:info gcc,查看gcc用法
n示例:info libc,查看标准C函数

分享到:
评论

相关推荐

    Linux下C/C++开发入门及开发环境配置

    本文介绍了Linux环境下C/C++开发的基础知识,重点讲解了GCC的使用方法及常见选项。掌握这些基本技能对于初学者来说至关重要,能够帮助他们在Linux平台上更加高效地进行C/C++程序开发。此外,通过了解GCC提供的各种...

    Linux下C++开发基础学习文档

    压缩包内有3个文档“Linux平台C及C++软件开发入门.ppt”、“linux下c++编程之旅.doc”以及”Linux下的C++编程入门教程.ppt“都是我从网上找到后筛选过的一些经典的linux下开发c++基础学习的教程,全部是高清晰中文版...

    Linux的C-C++开发.zip

    在IT行业中,Linux环境下的C和C++开发是一项基础且重要的技能。Linux系统因其开源、稳定和高效的特点,被广泛应用于服务器、嵌入式设备以及高性能计算等领域,而C和C++作为底层编程语言,是Linux系统开发的核心工具...

    linux下的C++编程.pdf

    Linux下的C++编程环境搭建和基础概念: Linux操作系统版本:文档中提及Red Hat Linux 7.2,这是一个较早版本的Linux发行版。Red Hat是一个著名的Linux发行...这些都是在Linux环境下进行C++开发所必需的技能和知识点。

    Linux C_C++后端服务器架构开发1

    在Linux环境下进行C/C++后端服务器架构开发是一项复杂而关键的任务,涉及到多方面的技术知识。本课程主要涵盖了以下几个核心领域: 1. **精进基石**:这部分内容强调基础扎实的重要性,包括深入理解数据结构与算法...

    传智播客2018c++全套讲义,c基础,c提高,c++基础,linux,c++提高,数据结构,设计模式

    这套讲义全面覆盖了从C语言的基本概念到C++的高级特性,以及Unix/Linux操作系统的基础知识,数据结构和设计模式的深入理解。通过系统学习,开发者可以建立起坚实的编程基础,为更复杂的系统开发打下坚实的基础。此外...

    Linux下使用C++进行Socket编程

    在Linux下,使用C++封装Socket编程的关键在于创建ClientSocket和ServerSocket两个类,分别用于处理客户端和服务器端的通信需求。在封装之前,需要了解Socket的工作机制。通常,服务器端会先启动,创建一个监听Socket...

    Linux下由VIM搭建C/C++开发环境介绍

    在 Linux 平台下搭建好的 C/C++ 开发环境需要安装基本的开发环境、VIM 编辑器和一些插件,例如 CTags、Taglist 和 WordComplete。同时,我们需要配置 VIM,以便更好地支持 C/C++ 开发。通过这些配置,我们可以快速地...

    linux和c/c++,makefile

    在IT行业中,Linux和C/C++是至关重要的技术领域,特别是在系统级编程和软件开发中。Makefile则是项目管理和编译自动化的重要工具。让我们详细探讨这些主题。 首先,Linux是一种开源的操作系统,以其稳定性和可定制...

    LINUX环境下用C++实现SNMP网管协议

    在本项目中,耶健同学的目标是在Linux环境下,基于C++和SNMP协议,开发一个简单的网络管理应用。此应用旨在加深对网络管理技术的理解,并熟悉相关RFC文件,特别是RFC1155(SMI,即结构和标识TCP/IP互联网的管理信息...

    linux c/c++基础学习资料(百度云链接和提取码)

    Linux C/C++基础学习资料是IT领域初学者和开发者的重要资源,涵盖了操作系统、编程语言以及算法等多个关键知识点。本文将详细解析这些主题,以便你更好地理解和掌握相关技能。 首先,让我们从“Linux命令详解”开始...

    Linux-C语言编程宝典.rar_C语言_LINUX c++ 编程_linux_linux c++_linux 编程

    《Linux-C语言编程宝典》是一本专注于在Linux环境下进行C语言编程的参考资料,它涵盖了C语言的基础知识以及与Linux操作系统交互的相关技术。对于想要深入理解Linux系统编程的开发者来说,这本书提供了丰富的学习材料...

    Linux下的C-C++编程

    本教程主要针对Linux环境下的C和C++编程,特别是如何利用Linux API进行程序设计。 1. **C语言编程基础**:C语言是一种强大的系统编程语言,被广泛用于编写操作系统、设备驱动程序和嵌入式软件。在Linux下编程,需要...

    c/c++嵌入式开发与linux命令大全

    在"C/C++嵌入式开发与Linux命令大全"这一主题中,我们涵盖了两个主要领域:C/C++编程语言以及在Linux环境下进行嵌入式系统开发所使用的命令行工具。C和C++是底层编程的基石,广泛应用于嵌入式系统的开发,而Linux...

    Linux下C语言开发环境

    在Linux环境下进行C语言开发是一项基础且重要的技能,尤其对于那些致力于系统级编程和嵌入式领域的开发者。本文将深入探讨Linux操作系统、开发环境的设置、常用的开发工具以及编码风格。 首先,Linux操作系统是一个...

    Linux下C与C++环境

    这些都是Linux环境下C和C++开发的基础知识,对于任何想要在Linux系统上进行C/C++编程的学习者来说,都是非常重要的资源。通过深入阅读和实践,你将能够熟练地在Linux环境中进行C和C++的开发工作。

    linux下C,C++学习资料

    在Linux环境下进行C和C++编程是许多开发者和学习者的选择,因为Linux提供了丰富的开源工具、强大的调试器以及对底层操作系统的直接访问。本资源包可能是针对初学者和有一定经验的程序员,提供了一些关于在Linux系统...

    Linux/C/C++函数中文使用手册

    在IT领域,Linux、C和C++是程序员的三大基石,尤其对于系统级开发和底层编程至关重要。本资源集合了这三个关键领域的中文使用手册,帮助开发者深入理解和运用各种函数及API。 1. **C/C++预处理命令**: C/C++的...

Global site tag (gtag.js) - Google Analytics