博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下c开发工具详解
阅读量:4213 次
发布时间:2019-05-26

本文共 4544 字,大约阅读时间需要 15 分钟。

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<stdio.h>

#include<math.h>
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)

 

 

转载地址:http://bjumi.baihongyu.com/

你可能感兴趣的文章
Swift cell的自适应高度
查看>>
【linux】.fuse_hiddenXXXX 文件是如何生成的?
查看>>
【LKM】整合多个LKM为1个
查看>>
【Windows C++】调用powershell上传指定目录下所有文件
查看>>
Java图形界面中单选按钮JRadioButton和按钮Button事件处理
查看>>
小练习 - 排序:冒泡、选择、快排
查看>>
SparkStreaming 如何保证消费Kafka的数据不丢失不重复
查看>>
Spark Shuffle及其调优
查看>>
数据仓库分层
查看>>
常见数据结构-TrieTree/线段树/TreeSet
查看>>
Hive数据倾斜
查看>>
TopK问题
查看>>
Hive调优
查看>>
HQL排查数据倾斜
查看>>
DAG以及任务调度
查看>>
LeetCode——DFS
查看>>
MapReduce Task数目划分
查看>>
ZooKeeper分布式锁
查看>>
3126 Prime Path
查看>>
app自动化测试---ADBInterface驱动安装失败问题:
查看>>