linux平台下的c c 开发工具,linux下c开发工具详解

1.头文件和库文件的位置(linux下)(我的是centos7.0)

/usr/include

/usr/local/include/

/usr/lib64(其他的可能是/usr/lib)

/usr/local/lib64(其他的可能是/usr/local/lib)

2.如何 使用外部库

gcc -Wall a.c -o a -lm

-lm表示要链接libm.so或者libm.a库文件

此处m表示数学库函数,lib不需要写出来 ,故只需写成lm,链接数学库

一个简单的例子:

进入自己的用户目录 cd ~

进入Documents目录 cd Documents

创建practise目录并进入,以后的练习文件放入此目录下

mkdir practise

cd practise

创建并编写calc.c文件

vim calc.c

#include

#include

int main()

{

double a=pow(2.0,3.0);

printf("%lf\n",a);

return 0;

}

按ESC切换vim模式,敲:键

输入wq(w表示写入的保存,q表示退出)

然后gcc calc.c -Wall -o calc -lm

最后ls ,可以看到生成了一个calc文件(此文件就是最后的可执行文件)

运行文件./calc

最后查看到8.000000

(编译好的math库的位置:/usr/lib/libm.a(静态库)和/usr/ib/libm.so(共享库)

3.静态库和共享库的区别:

静态库:(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序执行的时候将不再需要静态库

共享库:(.so或.sa):程序在运行的时候才去链接共享库的代码,多个程序共享使用库的代码。

4.如何生成静态库:

.a文件是一个或者多个.a文件的打包

举例:

编写一个hello_fn.c文件

编译生成.o文件:gcc -c hello_fn.c    (就会生成一个hello_fn.o文件)

ar rcs libhello.a hello_fn.o

ar是故归档工具,rcs表示(replace and create and save)

5.如何使用.a文件:

gcc -Wall main.c -o main -lhello

gcc -Wall -L. main.c  libhello.a -o main

-L.:表示库文件的位置在当前目录下

6.库的搜索路径

C_INCLUDE_PATH    LIBRARY_PATH

从左到右搜索-I  -L 指定的目录

由环境变量指定的目录

由系统指定的目录 例如(usr/include,usr/lib等)

配置当前用户的环境变量:

vi ~/.bash_profile

7.生成共享库

shared:表示成成共享库格式

fPIC:产生位置无关码(

库名规则:libxxx.so

示例:gcc -shared -fPIC hello.o -o libhello.so

8.使用共享库

I:链接共享库,只要库名即可(去掉lib以及版本号)

L:链接库所在的路径

示例:gcc main.o -o main -L. -lhello //其实和静态库是一样的使用方式,若两者同时存在,则默认链接动态库

若已经得到了main,怎么配置共享库的位置可以运行时链接

1.拷贝.so文件到系统共享库路径下,一般指/usr/lib

2.更改LD_LIBRARY_PATH

3.ldconfig

配置ld.so.conf(位置:/etc/ld.so.conf     ,Idconfig更新Id.so.cache

可以使用ldd命令查看所依赖的动态连接库的尽可能的详细信息

常用的linux命令:

-f:强制执行

-h:human readable(如将文件尺寸单位表示为K或者M)

-i:开启交互模式

-r:(或者R):递归执行(此命令是操作目录的相关命令的选项)

tar -zcf bg.png.tar.gz bg.png

history:查看执行过的命令

!n:  调用之前的命令

tab:补全

常用的linux命令:

文件管理:

man:命令参考手册  举例(查看stdio.h头文件)则可以 man stdio  或者man stdio.h

cd,pwd,ls,

chmod:改变文件或者目录的权限

chown:改变目录或文件的所有者

chgrp:改变目录或文件的所属组

以上三者对于编程人员来说用的相对较少(一般维护人员用的较多)

file:查看文件类型    例如:file hello.h 结果显示ASCII text,file calc.c 结果显示:C source,ASCII text

重点:

cp:复制文件或者目录   例如:cp  a.h sun   //把当前目录下的a.h文件复制到sun文件目录中

mv:移动目录、文件或目录、文件改名

rm:删除目录或文件

rmdir:删除空目录

touch:更改时间戳

mkdir:创建目录

ln:为文件或目录创建链接  此条命令很常用

1.创建软链接:ln –s 源文件 目标文件 -s决定是软链接还是硬链接(两者的区别:软链接生成镜像,不占存储空间,硬链接生成和源文件完全大小的文件,占存储空间,共同点事两者都和源文件同步变化)

more,less  分页查看  ctrl+f 向下一页 ctrl+b 向上一页

head tail   查看文件的头部和尾部

whereis:查看文件所在的位置(通常用于查找可执行文件或配置)  (经常使用)

which:确认当前执行的是哪个目录下的可执行文件  列如:which more

whereis 和 which的区别

whereis more :结果显示:more: /usr/bin/more /usr/share/man/man1/more.1.gz /usr/share/man/man1p/more.1p.gz

which more   :结果显示:/usr/bin/more  (显示的是可执行文件的目录)which查找的顺序(/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)

which的原理:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

作用:查找某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

特别好用的一个命令:查找文件位置:locate ***

linux目录结构(重点)

/       整个文件系统的根

----/bin/  最经常使用的命令 列如ls,cd等

----/boot/   存放着启动linux时使用的一些核心文件

----/dev/  设备文件目录

----/etc/  系统管理所需要的配置文件和目录

----/etc/init.d/   非常重要的一个:系统服务启动配置脚本目录

----/home/  用户的主目录

----/lib/   存放系统所需要的共享库和静态库

----/media/  光驱、软驱,USB存储设备加载所用的目录

----/mnt/     加载的文件系统目录

----/opt/    某些可选软件安装后放入此目录

----/proc/    不是真正的文件系统,操作系统运行时,进程信息和内核信息(比如cpu,硬盘分区,

内存信息等)放在这里

----/root/  root用户的主目录

----/sbin/   系统管理命令存放处,一般只供root用户使用

-----/tmp/   存放系统运行过程中的临时文件,一般在系统重启后将被清空

-----/var/  存放不断变化的文件如日志,安装包缓存目录、web目录,ftp,mailserver相关目录等

ls的几个选项(以前忽略的)

-i  显示文件的inode

-F    标识文件的类型,目录/  符号链接@  可执行文件*  socket文件=,管道加|...

-h   human readable (要与-l联合使用)

隐藏文件:  在UNIX系统中以.开头的文件

文件类型通常包括:

-:普通文件

d:目录

l:符号连接

c:字符设备

b:快设备

s:socket(套接字)

p:具名管道(FIFO)

修改时间:

$touch -d '2009-11-18 12:32:00' a.txt

创建目录:

mkdir

-p  如果父目录不存在,创建

mkdir -p f4/{t1/{v1,v2},t2/{u1,u2}}

则创建的目录结构 :f4 ---t1---v1

---v2

---t2---u1

---u2

常用的linux命令---网络通讯  (注意,以下所有命令要在相对应服务开启的时候才有用)

telnet    --基于telnet协议,与其他计算机通信

telnet hostname/ip [port]

默认端口23

明文传输,对于敏感数据不安全

连接主机后,进入命令模式 ctrl+]

此条命令的使用价值:检测服务进程是否运行

举例:我们开发了一个服务器端程序(sunxiaowu.org.cn)(侦听8888端口)

则可以 telnet   sunxiaowu.org.cn 8888来检测

ssh       --基于OpenSSH协议的远程登录客户端(secure shell)

默认端口 22

常用执行方式: ssh-l login-name hostname/ip[port]

ssh login-name@hostname/ip [port]

ssh数据是加密传输

举例: ssh sunxiaowu@localhost

ssh -l sunxiaowu localhost

scp       --基于OpenSSH协议的安全复制远程文件

使用方式:

1.本机-》远程主机 :scp local-files loginname@remote-host/ip:[dir/file]

2.远程主机-》本机:scp   login-name@remote-host/ip:files local-dir

-p:保持文件权限

-r:递归式复制

举例:

将当前目录下所有的.c 文件上传到sunxiaowu.org.cn主机的sunxiaowu用户主目录下的test目录下

scp *.c sunxiaowu@sunxiaowu.org.cn:test

将suxiaowu.org.cn主机上sunxiaowu用户主目录下的test目录所有内容复制到本机当前目录下的backups目录内

scp -r sunxiaowu@sunxiaowuorg.cn:test  ./test

ftp、sftp --文件传输工具

ifconfig  配置网络接口

netstat   查看网络状态

tcpdump   网络传输数据分析工具(抓包工具)

ping     查看主机是否可以到达

whois    域名查询工具

talk       与其他在线用户交流

write      想其他在线用户发送信息

wall       向所有在线用户发送信息(write  all)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值