`

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++开发基础学习文档

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

    linux下的c++编程实验

    基于linux下的C/C++编程在以后的程序开发中必将成为主流趋势,如何在IT业更好的发展linux下的C/C++编程是基础

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

    1. 精进基石专栏 2. 高性能网络设计专栏 3. 基础组件设计专栏 4. 中间件开发专栏 5. 开源框架专栏 6. Rust项目专栏 7. 性能分析专栏 8.

    嵌入式Linux应用程序开发详解

    详细讲解c语言基础,数据结构,c++,unix下c语言开发,arm指令集,linux系统移植等

    基于c语言在linux下贪吃蛇项目

    在Linux虚拟机下用c语言写的一个贪吃蛇游戏项目,源于一个游戏教学开发项目工程,可下载运行提供学习借鉴,供有C语言基础和linux基础的学习,有界面化制作,算法的编写。

    Linux代码,以C++为基础.rar

    一、C语言是什么? 是一种高级语言,相比于其他高级语言而言,更贴近硬件 。可以直接操作内存,硬件设备 。其运行效率是最高的 ,运行...三、学习在Linux上写C代码 1.GCC编译器下载 打开Linux终端,右击选择打开终端

    Linux编程环境 介绍 Linux开发基础

    在此基础上,重点讲述 Linux 上 C 语言编程的基本工具,包括编译器和调试器,主要是它们的重要选项和基本用法。接下来讲述在项目组织和开发过程中非常重要的工具,即 GNU make 和 makefile。 最后讲述 diff/patch ...

    linux下GCC编译C程序

    它已成为许多集成开发工具的基础,被世界各地的发行商应用在Linux和其他操作系统之上。 GCC已不再是主要针对GNU项目自身的软件的小型C语言编译器了。如今,它已支持了许多不同的语言,包括C、C++、Ada、Fortran、...

    linux开发基础教程

    linux开发基础教程

    mingw C/C++程序环境

    MinGW 提供了一套简单方便的...MinGW是完全免费的自由软件,它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。

    Linux系统设计-听说C与Linux更搭配:C基础 C++面向对象编程 , linux系统编程以及一些操作系统的相关知识

    所有源码,资料均经过严格测试,可以直接运行,可以放心下载使用。...许多知名的科学计算软件都在Linux上开发和运行,Linux系统在各个领域都有广泛的应用,其强大的功能和灵活性使得它成为许多产品和服务的基础架构。

    C/C++笔试题合集

    C/C++笔试题合集 oracle数据库培训资料 android反编译工具集合 c++课程设计聊天程序 Linux与Unix Shell编程指南(PDF) C++从入门到精通,C++Primer中文版 嵌入式linux应用程序开发详解 VB程序设计资料ppt 我...

    Linux 常用C函数

    本人有幸在坊间得到一名为“Linux C 函数参考”的文本文件,并在此基础重新排版并制成html文件以方便广大爱好者阅读,我感到无比的荣幸。在此多谢各位的鼎力支持,以及日益完善此文件,希望有朝一日能成为Linux编程...

    eclipse 开发c/c++

    C 和 C++ 语言都是世界上最流行且使用最普遍的编程语言, 因此 Eclipse 平台(Eclipse Platform)提供对 C/C++ 开发的支持一点都不足为奇。 因为 Eclipse 平台只是用于开发者工具的一个框架,它不直接支持 C/C++;它...

    linux CC++ 码农有道教程-视频教程网盘链接提取码下载.txt

    《Linux C/C++ 一码农有道教程》是一门专为初学者设计的课程,通过系统性地讲解Linux操作系统和C/C++编程语言的基础知识和应用技巧,帮助学员快速掌握开发Linux应用程序的能力。课程包括理论与实践相结合的教学方式...

    实用的Linux c 定时器代码

    linux c 开发的定时器,封装为CTimer类,编译运行已通过,包含头文件就可以用,可以节省编码与调试时间,很实用的代码,可以用于项目中的基础库。Timer.h Timer.cpp

    Linux下Qt编程入门教程

    本书主要讲述Qt在Linux下的编程基础知识 以红旗LINUX4.1桌面版为例qt-x11-free-3.3.2 目录 前 言 第一章 Qt的安装 第二章 Hello World 第三章 C/C++ 基础

    Linux下的C开发

    该课程是为期四个月的全日制职业培训,要求学员毕业时具备非常Solid的C语言编程能力,能熟练地使用Linux系统,同时对计算机体系结构与指令集、操作系统原理和设备驱动程序都有比较深入的了解。然而学员入学时的水平...

    基于C和C++开发的多线程高并发服务器源码+项目说明(课程设计).zip

    基于C和C++开发的多线程高并发服务器源码+项目说明(课程设计).zip 基于Linux操作系统下由C语言编写的服务器引擎,该引擎由四个层次组成: | 层次 | 说明 | | -------------- | --------------------------------------...

Global site tag (gtag.js) - Google Analytics