zoukankan      html  css  js  c++  java
  • Linux C相关基础

    系统求助
    man 函数名
    man 2 函数名    -    表示函数是系统调用函数
    man 3 函数名    -    表示函数是C的库函数    
    eg:man fread
        man 2 write 
    如果我们要write这个函数的说明,当我们执行man write时,输出的结果却不是我们所需要的. 因为我们要的是write这个函数的说明,可是出来的却是write这个命令的说明.为了得到write的函数说明 我们要用 man 2 write. 2表示我们用的write这个函数是系统调用函数,还有一个我们常用的是3表示函数是C的库函数.
     
    makefile
    注释行以#开头
    Makefile中最重要的是描述文件的依赖关系的说明.
    一般的格式是: 
    target: components 
    TAB rule           //TAB处是一个tab键
    第一行表示的是依赖关系.
    第二行是规则. 
    eg:
    # 这是上面那个程序的Makefile文件                         <注释>
    main:main.o mytool1.o mytool2.o                      <目标:依赖>
        gcc -o main main.o mytool1.o mytool2.o        <规则>
    main.o:main.c mytool1.h mytool2.h 
        gcc -c main.c  
    mytool1.o:mytool1.c mytool1.h 
        gcc -c mytool1.c  
    mytool2.o:mytool2.c mytool2.h 
        gcc -c mytool2.c
     
    make执行的时候可以指定要执行的目标:make target
    make mytool2.o  //就只会执行  gcc -c mytool2.c这个命令
     
    Makefile常用的三个变量:
    $@ --    目标文件
    $^ --    所有的依赖文件
    $< --    第一个依赖文件
     
    eg:
    # 这是上面那个程序的Makefile文件                         <注释>
    main:main.o mytool1.o mytool2.o                      <目标:依赖>
        gcc -o $@ $^                                                  <规则>
    main.o:main.c mytool1.h mytool2.h 
        gcc -c $<
    mytool1.o:mytool1.c mytool1.h 
        gcc -c $<  
    mytool2.o:mytool2.c mytool2.h 
        gcc -c $<
     
    Makefile缺省规则:
    ..c.o:  --    表示所有的 .o文件都是依赖与相应的.c文件的.例如mytool.o依赖于mytool.c
     
    eg:
    # 这是上面那个程序的Makefile文件                         <注释>
    main:main.o mytool1.o mytool2.o                          <目标:依赖>
        gcc -o $@ $^                                                 <规则>
    ..c.o:
        gcc -c $<
     
     
    make
    简化编译时所需要下达的指令; 
    若在编译完成之后,修改了某个原始码档案,则 make 仅会针对被修改了的档案进行编译,其它的 object file 不会被更动; 最后可以依照相依性来更新( update )执行档。
     
    gcc 编译器
    gcc -o         输出可执行文件
    gcc -c         输出目标代码,执行该命令不会生成可执行文件,gcc -Wall -c, -Wall 为产生更详细的编译过程信息。上面的讯息为警告讯息,
                      gcc -O -c  在编译的时候,依据作业环境给予最佳化执行速度 
    gcc -g         编译的时候提供对程序进行调试的信息.
    gcc -o -lm    编译时连接libm-开头的库,(去掉前面的lib和后面的版本标志,就剩 下m了所以是 -lm)。
                      -l 是『加入某个函式库(library)』的意思。
                      m 则是 libm.so 这个函式库。
    gcc -o -L/home/hoyt/mylib -L指定链接库的路径,系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面 的库,我们可以不指定路径.
    eg:要加入包含sin的函数库libm.so, gcc -o -lm -L/lib -L/usr/lib -L/usr/local/lib
      
    关于第一行的include文件:
    第一行『 #include <stdio.h>』,这行说的是要将一些定义数据由 stdio.h 这个档案读入,这包括 printf 的相关设定。这个档案其实是放置在 /usr/include/stdio.h 的!那么万一这个档案并非放置在这里呢?那么我们就可以使用底下的方式来定义出要读取的 include 档案放置的目录: 
    gcc sin.c -lm -I/usr/include    
    -I/path 后面接的路径( Path )就是设定要去搜寻相关的 include 档案的目录啦!不过,同样的,默认值是放置在 /usr/include 底下,除非您的 include 档案放置在其它路径,否则也可以略过这个项目!
    如果我能一直坚持下去,就像坚持当初的梦想一样,或许我也能成为大神呢,哈哈哈。
  • 相关阅读:
    使用npm安装一些包失败了的看过来(npm国内镜像介绍)(解决生成空的abp模板项目一直卡在还原cpm包中)
    .NET CORE 发布到IIS问题 HTTP ERROR 500.30
    .NET Core默认不支持GB2312,使用Encoding.GetEncoding(“GB2312”)的时候会抛出异常。
    .net c# 文件分片/断点续传之下载--客户端
    aspnetcore 实现断点续传
    C# 反射获取属性值、名称、类型以及集合的属性值、类型名称
    C# 3Des两种加密方式 (对应java中的desede/CBC/PKCS5Padding加密)
    Asp.NetCore3.1中多次读取Request.Body
    ASP.NET Core 2.0系列学习笔记-DI依赖注入
    C# Newtonsoft.Json JObject合并对象整理
  • 原文地址:https://www.cnblogs.com/faraway-tiny/p/4917511.html
Copyright © 2011-2022 走看看