linux c编程(一)
1 常用系统环境配置
2 使用g++编译连接,使用gdb调试
3 使用makefile组织目标文件的依赖关系
4 使用git
1 常用系统环境配置
输入法
Download setup file for sogou input method (a deb file)
sudo dpkg -i sogou_pinyin_linux_1.0.0.0033_amd64.deb
sudo apt-get install -f
system setting > language support 键盘输入方式系统中选择fcitx
root权限
sudo passwd # set password for root
091207
set a english environment
system setting中设置
自定义桌面文件夹 root权限,修改文件$HOME/.config/user-dirs.dirs
Vim
16.04自带语法高亮
使用ctags 跳转到函数定义
sudo apt-get install exuberant-ctags #安装
进入源代码的最顶层目录,运行 ctags -R,例如:
$ cd ~/work/code/
$ ctags -R
使用ctrl + ] 跳转到函数定义位置
vim就像使用sublime做前端,需要安装插件适应当前的工作
2 使用g++编译连接,使用gdb调试
G++
gcc编译的过程
预编译 (gcc -E), 编译 (gcc), 汇编 (as),和 连接 (ld)
c++的程序需要使用g++编译
g++ shi.cpp -o hello
./hello 运行生成的可执行文件
预编译 (gcc -E) 执行的工作
C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号“#”开头
编译
作为一个中间步骤,gcc把你的代码翻译成汇编语言。
汇编器as
把汇编语言代码转换为目标代码
连接器 ld
“-c”,表示仅编译(Compile),不连接(Make),如果没有”-c”参数,那么就表示连接
gcc –o test test1.o test2.o,将test1.o和test2.o连接为可执行的二进制文件test
-l参数,与之紧紧相连的是表示连接时所要的链接库,比如多线程,如果你使用了pthread_create函数,那么你就应该在编译语句的最后加上”-lpthread”,”-l”表示连接,”pthread”表示要连接的库,注意他们在这里要连在一起写,还有比如你使用了光标库curses,那么呢就应该在后面加上”-lcurses”,比如下面的写法:
gcc –o test test1.o test2.o –lpthread –lcurses
如何使用gdb调试
准备工作,需要向编译得到的可执行文件加入调试信息 使用参数 -g
gcc -g hello.c -o hello
gdb hello
进入gdb,使用help查看命令帮助
gdb running
run 运行程序
continue -- Continue program being debugged
next -- Step program 不跳入函数
step -- Step program until it reaches a different source line 跳入函数
kill 命令,终止正在调试的程序,简写为k
breakpoint
break 8 在对应的行上设置断点
print 打印变量值
watch 实现对一个变量的监控
list命令显示出部分源代码
list 9 用list加行号显示该行附近的源代码,本程序显示的第九行附近的源代码
quit命令,退出gdb调试,简写为q;
3 使用makefile组织目标文件的依赖关系
make
http://www.cnblogs.com/luchen927/archive/2012/02/05/2339002.html
主要内容:
make所做的工作,makefile文件基本编写规则,make的执行过程
进阶 makefile中变量和自动推导
无论是C还是C++,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile),一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。
链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给 中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。
目标 : 需要的条件 (注意冒号两边有空格)
命令 (注意前面用tab键开头)
实际执行的时候,会比较目标文件和条件文件的时间戳,有选择地执行makefile命令
4 使用git
apt-get install git
git config --global user.name rex
git config --global user.email water799@126.com #设置commit的email
git config --global -l 查看设置信息
git clone https://github.com/ceo1207/helloworld.git #克隆操作
执行克隆操作之后,文件下载的位置在home下
如何设置默认的下载位置
记得查找document
https://git-scm.com/docs/git-clone
相对而言,github for windows非常简洁易操作
Github for Windows
github setup安装出错,hosts重定向github
使用离线版本安装,手工用浏览器下载文件,然后运行.application文件即可
自动创建SSH key,以便当前主机能操作远程仓库
GitHub for Windows - oneBiteArea
27:6d:92:11:6b:5a:d0:b6:d0:ce:e3:49:46:29:f7:90
github基本功能使用
创建或者克隆repository
修改或者创建文件,会自动识别修改,publish之后,上传到远程仓库中
提交PR pull request,可以合并到主分支中
github for windows
process
1 Clone or create repositories
2 Create branches
3 Commit changes
4 share,可以选择和原版本merge
linux c编程(一)的更多相关文章
- 【深入浅出Linux网络编程】 "开篇 -- 知其然,知其所以然"
[深入浅出Linux网络编程]是一个连载博客,内容源于本人的工作经验,旨在给读者提供靠谱高效的学习途径,不必在零散的互联网资源中浪费精力,快速的掌握Linux网络编程. 连载包含4篇,会陆续编写发出, ...
- 【linux草鞋应用编程系列】_5_ Linux网络编程
一.网络通信简介 第一部分内容,暂时没法描述,内容实在太多,待后续专门的系列文章. 二.linux网络通信 在linux中继承了Unix下“一切皆文件”的思想, 在linux中要实现网 ...
- 学习linux/unix编程方法的建议(转)
假设你是计算机科班出身,计算机系的基本课程如数据结构.操作系统.体系结构.编译原理.计算机网络你全修过 我想大概可以分为4个阶段,水平从低到高从安装使用=>linux常用命令=>linux ...
- Linux系统编程温故知新系列 --- 01
1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...
- linux系统编程之错误处理
在linux系统编程中,当系统调用出现错误时,有一个整型变量会被设置,这个整型变量就是errno,这个变量的定义在/usr/include/errno.h文件中 #ifndef _ERRNO_H /* ...
- storysnail的Linux串口编程笔记
storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据Ge ...
- Linux 网络编程(IO模型)
针对linux 操作系统的5类IO模型,阻塞式.非阻塞式.多路复用.信号驱动和异步IO进行整理,参考<linux网络编程>及相关网络资料. 阻塞模式 在socket编程(如下图)中调用如下 ...
- linux网络编程 no route to host 解决方案
linux网络编程 no route to host 解决方案 [整合资料] (2013-05-13 21:38:12) 转载▼ 标签: net iptables it 分类: Linux 参考资料h ...
- 初探linux内核编程,参数传递以及模块间函数调用
一.前言 我们一起从3个小例子来体验一下linux内核编程.如下: 1.内核编程之hello world 2.模块参数传递 3.模块间 ...
- linux脚本编程技术
linux脚本编程技术 一.什么是脚本 脚本是一个包含一系列命令序列的可执行(777)文本文件.当运行这个脚本文件时,文件中包含的命令序列将得到自动执行. 二.脚本编程 #!/bin/sh 首行固定格 ...
随机推荐
- CKEditor4x word导入不保存格式的解决方案
后台上传文档时,目前功能都通过word直接复制黏贴实现,之前和word控件朋友一起测试找个问题,原始代码CK4.X没有找个问题. 第一时间排查config.js的配置发现端倪,测试解决! 由于配合ck ...
- 2018年第九届蓝桥杯【C++省赛B组】第四题 测试次数
x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机.各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通.x星球 ...
- 【P3398]】仓鼠找sugar
暴力lca 题目 有一种情况肯定不行 较深得lca深度比浅的两个点还深,直接不行 如果可能存在解 则解一定是介中情况 较深的lca一定在另一个lca路径上. 判读呢? 就是用深的lca和浅的lca的两 ...
- Vue nodejs商城项目-项目概述
项目概况 用vue2.0 +node.js +MongonDB 做了一个商城系统 技术选型 Vue2.0+node.js+express+MongoDB+axios+vuex 构建工具 Webpack ...
- JavaEE 面试题总结
一. JDBC 4 1. Java中访问数据库的步骤 4 2. Statement,PreparedStatement,CallableStatement的功能.特点. 4 3. 如何利用JDBC的A ...
- AMD、CMD、CommonJs和ES6对比
一.AMD(异步模块定义) AMD(异步模块定义)是RequireJS在推广过程中对模块定义的规范化产出.AMD是一个概念,RequireJs是对这个概念的实现.比如javascript语言是对ECM ...
- 史上最简单的SpringCloud教程 | 第十二篇: 断路器监控(Hystrix Dashboard)
转载请标明出处: 首发于:https://www.fangzhipeng.com/springcloud/2017/07/12/sc12-hystix-dashbd/ 本文出自方志朋的博客 最新Fin ...
- Pop–实现任意iOS对象的任意属性的动态变化
简介 Pop 是一个可扩展的动画引擎,可用于实现任意iOS对象的任意属性的动态变化,支持一般动画,弹性动画和渐变动画三种类型. 项目主页: pop 最新示例: 点击下载 注意: 官方代码中,并不包含实 ...
- 【学时总结】◆学时·VI◆ SPLAY伸展树
◆学时·VI◆ SPLAY伸展树 平衡树之多,学之不尽也…… ◇算法概述 二叉排序树的一种,自动平衡,由 Tarjan 提出并实现.得名于特有的 Splay 操作. Splay操作:将节点u通过单旋. ...
- 干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾!
1 文件{ ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt touch file # 创建空白文件 rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制) dos2u ...