Linux下C和C++开发基础
来源:互联网 发布:淘宝云客服招聘条件 编辑:程序博客网 时间:2024/04/28 15:22
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
/***************************
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
/*******************************
C代码
- #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
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++开发基础
- Linux下C和C++开发基础
- Linux下开发C
- linux下c开发
- Linux下C和C++开发基础 (转自zolo_jiang的笔记)
- linux下C语言基础
- linux下c编程基础
- Linux c 开发 - 常用基础
- C语言开发必备基础只是------>Linux下C开发技能
- linux 下C/C++开发
- Linux下C语言开发
- Linux基础和C高级
- Linux下C开发环境的构成和安装
- Linux下C开发环境的构成和安装
- Linux下C开发环境的构成和安装
- Linux下C开发环境的构成和安装
- Linux下C开发环境的构成和安装
- linux中configure一些选项的使用
- mysql 基本操作
- 人事
- Unix系统cpio命令
- mount 错误 “RPC: failed to contact local rpcbind server (errno 5).”解决方法
- Linux下C和C++开发基础
- 如何让动态创建的页面元素响应用户事件 (HTML/javascript/jQuery/Ajax/DOM)
- Linux下软件安装方法总结
- 如何在没有密码的情况下进入Linux操作系统
- select,poll和epoll使用
- linux解压缩
- STM32 SPI NSS大揭秘
- 转:涉足机器视觉
- CentOS 5上架设GForge5.7之无法生成SVN目录故障解决