高级Linux程序设计第一章:入门

VizCut 全自动批量视频二次去重处理!支持视频无水印解析下载和批量剪辑,完全免费,使用简单! 可制作和分享剪辑模板,已提供20+种剪辑方案,内置众多扫光蒙版素材。支持二次去重批量处理,完全免费,无广告,且支持视频无水印解析下载,非常强大。如果说我们处理的视频需要进行一样的参数设置的话,就可以把我,1设置的参数设置为模板,后面就可以一键调用。1. 本地CPU处理,可设置线程数,可开启GPU加速,无任何限制,全看机器性能。适用场景:自媒体搬运、短视频二创、批量去重等,完全免费,无广告干扰!3. 20+种参数可调可选,内置很多相关素材。可保存为模板,可复用、可分享、可导入。2. 所有参数的设置, 阅读详情

1、用GCC编译

1.1、创建源文件

  • (main.c) C 源文件 - main.c

 

#include

#include “reciprocal.hpp”

int main (int argc, char **argv)

{

    int i;

    i = atoi (argv[1]);

    printf (“The reciprocal of %d is %g/n”, i, reciprocal (i));

    return 0;

}

  • (reciprocal.cpp) C++ 源文件 - reciprocal.cpp

#include

#include “reciprocal.hpp”

double reciprocal (int i) {

    // I should be non-zero.

    assert (i != 0);

    return 1.0/i;

}

  • (reciprocal.hpp) 头文件 - reciprocal.hpp

#ifdef __cplusplus

    extern “C” {

#endif

    extern double reciprocal (int i);

#ifdef __cplusplus

    }

#endif

1.2、编译源文件

  • 编译main.c:

% gcc -c main.c

  • 编译reciprocal.cpp:

% g++ -c reciprocal.cpp

  • 参数-I指定搜索头文件的位置。

  • 默认情况下,GCC在当前文件夹及标准库的头文件所在的文件夹来搜索头文件。

% g++ -c -I ../include reciprocal.cpp

  • 可以用参数-D在命令行设定宏(macro),并且可以设定宏的值

对于如下程序definemacro.c:

#include "stdio.h"

#include "stdlib.h"

int main(int argc, char** argv){

        int i = 3;

#ifdef CHANGEVALUE

        i = 4;

#endif

        printf("i = %d/n", i);

        printf("PT = %f/n", PI);

}

如果编译时命令行为gcc definemacro.c,会报‘PI’ undeclared错误。

如果编译时命令行为gcc -D PI=3.14 definemacro.c,则输出如下:

i = 3
PT = 3.140000

如果编译时命令行为gcc -D PI=3.14 -D CHANGEVALUE definemacro.c,则输出如下:

i = 4
PT = 3.140000

  • 可以用GCC编译时优化代码.

% g++ -c -O2 reciprocal.cpp

 

1.3、链接对象文件

  • g++可以将.o对象文件链接成程序

% g++ -o reciprocal main.o reciprocal.o

  • 如果想链接其他库文件,则用参数-I

例如欲链接库libpam.a,则用如下命令行,编译器会自动加上前缀lib和后缀.a

% g++ -o reciprocal main.o reciprocal.o –lpam

  • 链接器默认在/lib和/usr/lib文件夹下面寻找系统标准库。

  • 如果想从其他的文件夹下面寻找要链接的库,则从参数-L指定

% g++ -o reciprocal main.o reciprocal.o -L/usr/local/lib/pam –lpam

 

2、用Make自动编译

  • Makefile如下:

reciprocal: main.o reciprocal.o

    g++ $(CFLAGS) -o reciprocal main.o reciprocal.o

main.o: main.c reciprocal.hpp

    gcc $(CFLAGS) -c main.c

reciprocal.o: reciprocal.cpp reciprocal.hpp

    g++ $(CFLAGS) -c reciprocal.cpp

clean:

    rm -f *.o reciprocal

  • 首先是编译目标(target),紧接着是一个冒号:,然后是完成目标所需的依赖(dependencies)

  • 下一行是完成编译目标的规则

  • 规则行必须以Tab键开头

  • $(CFLAGS)是make变量,变量可以再Makefile中定义,也可以在命令行定义

 

 

% make CFLAGS=-O2

gcc -O2 -c main.c

g++ -O2 -c reciprocal.cpp

g++ -O2 -o reciprocal main.o reciprocal.o

 

3、用GDB调试

3.1、带调试信息编译

  • 如果要在编译时带调试信息,则在编译时命令行用-g参数

 

% make CFLAGS=-g

gcc -g -c main.c

g++ -g -c reciprocal.cpp

g++ -g -o reciprocal main.o reciprocal.o

 

3.2、运行GDB

  • 启动GDB

% gdb reciprocal

  • 命令run加参数可运行程序

(gdb) run

Starting program: reciprocal

  • 命令where可以查看Stack

 

(gdb) where

#0 __strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0) at strtol.c:287

#1 0x40096fb6 in atoi (nptr=0x0) at ../stdlib/stdlib.h:251

#2 0x804863e in main (argc=1, argv=0xbffff5e4) at main.c:8

  • 用up命令可以弹出运行栈

 

(gdb) up 2

#2 0x804863e in main (argc=1, argv=0xbffff5e4) at main.c:8

8 i = atoi (argv[1]);

  • 用print命令可以查看变量值

(gdb) print argv[1]

$2 = 0x0

  • 用break命令可以设定断点

 

(gdb) break main

Breakpoint 1 at 0x804862e: file main.c, line 8.

  • 用next命令执行下一条语句

 

(gdb) next

9 printf (“The reciprocal of %d is %g/n”, i, reciprocal (i));

  • 用step命令可以进入一个函数

(gdb) step

reciprocal (i=7) at reciprocal.cpp:6

6 assert (i != 0);

Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新) 阅读详情

相关推荐

UG NX与PLC-1500的在环虚拟测试

TIA、PLCSIM、NetToPLCsim、KEPServerEX以及UG NX的在环虚拟测试

lvtlvtlvtlvt的博客 4175

GCC编译器CFLAGS、LDFLAGS详解

Linux开发中,我们经常用到Makefile来管理代码,进行代码的编译。一般的Makefile中都会包含CFLAGS、LDFLAGS两个选项,用于指导编译和链接的过程。有时候我们总是不注意这两个选项的一些区别,将某些编译选项放到链接选项中,导致编译生成的程序出现无法预知的问题;

小嵌同学的博客 2万+

ADS 2013安装教程

1.2013和2014安装过程是一样的,运行ads2013_06_shp_windows文件进行安装 2.点击“NEXT”。 3.选择I accept,然后点击“NEXT”。 4.选择“complete”,然后点击“NEXT”。 5.选择安装路径,最好默认安装路径,安装路径不要有中文,然后点击“NEXT”。 6.点击“NEXT”. 7.如下路径默认安装,然后点击“NEXT”。 8.点击“NEXT”。 ...

谢谢关注“小鱼教你模数电”,各平台同号 5962

gcc警告选项汇总

参考资料:https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options 请求或取消警告的选项 警告是诊断消息,报告的结构本质上不是错误的,但是有风险或表明可能有错误。 以下与语言无关的选项不会启用特定的警告,但会控制GCC生成的诊断类型。 -fsyntax-only 检查代码中的语法错误,但除此之外...

靑い空゛ 3万+

CFLAGS=-static 静态编译 少林功夫真嘿侯

x86_64-unknown-linux-uclibc-cc -static -o privoxy actions.o cgi.o cgiedit.o cgisimple.o deanimate.o encode.o errlog.o filters.o gateway.o jbsockets.o jcc.o list.o loadcfg.o loaders.ofile completed_com...

idjoy的专栏 3589

gcc ------ 编译与链接选项及CFLAGS、LDFLAGS、LIBS

编译链接参数设置

qq_41305859的博客 1307

makefile中的CFLAGS与LDFLAGS

在configure时我们经常会遇到明明已经指令了目录但有时就是链接不了的情况,解决方法及原因如下(引用自http://www.cnblogs.com/taskiller/archive/2012/12/14/2817650.html) CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个...

1020

Linux程序设计》 -> 《Linux高级程序设计》 -> 《Unix环境高级编程》

这是csdn linux版主写的: 《Linux程序设计》->《Linux高级程序设计》-《Unix环境高级编程》     可以说这个顺序代表了一般Linux程序猿的学习道路,《Linux程序设计》内容全面,易于入手,适用于新手详细了解Linux下编程,《Linux高级程序设计》则相当于在前一本的基础上进行了高度抽象和概括,介绍了Linux下工具链,可移植性,内核学习,图形编程等等

wusuopuBUPT的专栏 4235

探索Linux编程的深度:《Linux高级程序设计中文第三版》资源推荐

探索Linux编程的深度:《Linux高级程序设计中文第三版》资源推荐 【下载地址】Linux高级程序设计中文第三版资源下载 - **文件名**: Linux高级程序设计中文第三版.pdf- **格式**: PDF- **特点**: 高清晰度,带有书签- **适用对象**:Linux编程感兴趣的学习者 ...

gitblog_09708的博客 670

Linux高手必看的10本经典书籍

Linux 是一个开放、灵活、跨平台的操作系统,上至庞大的数据中心,下至可放于掌心中的嵌入式设备,Linux 的身影无处不在。 如果你想成为一名精通 Linux 程序设计高级程序员,选对 Linux编程的经典书籍就显得尤其重要,下面就为大家介绍几本学习Linux必备的几本书: 1、《Linux程序设计(第4版)》 万千读者推荐的Linux经典入门书、程序设计实战型图书,以简单易懂、内容全面和示例丰富而受到广泛好评。如果你没有Linux基础,可以先读这本。话说回来,虽然这一本很全面,但是在很多问题上讲的并

bsegebr的博客 1万+

Linux程序设计入门到实战 - 第一章 Linux系统入门:核心命令实战

第一章 Linux系统入门:核心命令实战1、Linux程序设计概要介绍2、从POST到Init,Linux的引导过程:在BIOS之后,操作系统才正式接管硬件资源3、Linux命令行常用快捷键:加速你与Linux的交互速度核心命令实战(命令行下的快捷键)4、cd:切换目录命令常用技巧4、mkdir:递归建立目录与批量克隆目录结构的技巧命令:递归的创建目录命令:批量建立目录5、touch:mtime,ctime和atime命令:touch,修改文件的时间6、ls:过滤文件与目录和查找**更新但不知文件名的技巧参

zhaopeng01zp的博客 956

linux下GDB的使用

• gdb [参数] Filename• -help:列出所有参数,并作简单说明。s file:读出文件(file)的所有符号• -core-c 这里的core是程序非法执行后core dump产生的文件-d 加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径• -quiet-q 使用该参数不显示gdb的介绍和版权信息。

hpx12345678的博客 2080

Notes for Advanced Linux Programming - 1. Getting Started

1. Getting Started 1.1. Compiling with GCC 1.1.1. Create the source code files (main.c) C source file—main.c #include <stdio.h> #include “reciprocal.hpp” int main (int argc, char **argv) ...

diebiaosang4496的博客 149

CFLAGS详解

Makefile选项CFLAGS,LDFLAGS,LIBS CFLAGS 表示用于 C 编译器的选项, CXXFLAGS 表示用于 C++ 编译器的选项。 这两个变量实际上涵盖了编译和汇编两个步骤。 CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立

xinyuan510214的专栏 8万+

strtol函数参数详解

    long int strtol(const char *nptr, char **endptr, int base);为什么第二个参数不用初始化只用定义一个未初始化的char 类型的指针即可???strtol是atoi的增强版,参数base范围从2至36,或0。参数base代表采用的进制方式,0/10是十进制1. endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如ch...

ERTFYANG学习笔记 3197

long int strtol(const char *nptr, char **endptr, int base)

long int strtol(const char *nptr, char **endptr, int base) strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。 参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。 可以被转换的合法字符依据base而定,举例来说,当base为2时,合法字符为‘0’,‘1’;base为8时,合法字符为‘0’,‘1’,……‘7’;base为10时,合法字符为‘0’,‘1’,……‘9’;base

西瓜游侠的博客 1575

strtol、wcstol、_strtol_l、_wcstol_l

strtol、wcstol、_strtol_l、_wcstol_l Visual Studio 2013 其他版本 将字符串转换成长整数值。 long strtol( const char *nptr, char **endptr, int base ); l

heary29的专栏 3596

国泰君安证券_2017-06-15_数量化专题之九十三:基于短周期价量特征的多因子选股体系.pdf

国泰君安证券_数量化专题之九十三:基于短周期价量特征的多因子选股体系

网上搜集的AD2S1210的驱动芯片代码包含了两个官方例子,总共五个例子,每个文件夹是单独的一个例子

网上搜集的AD2S1210的驱动芯片代码包含了两个官方例子,总共五个例子,每个文件夹是单独的一个例子

上一篇: 孔子是怎样炼成的
下一篇: 高级Linux程序设计第一章:入门
forfuture1978
博客等级 码龄17年 921粉丝 143原创
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值