zoukankan      html  css  js  c++  java
  • Linux程序设计 读笔1

    第一章 入门

    Linux应用程表现为两种特殊类型文件:可执行文件 + 脚本文件

    /bin             二进制文件目录,存放启动系统时用到的标准程序

    /usr/bin           用户二进制文件目录,存放用户使用的标准程序

    /usr/local/bin         本地二进制文件目录,存放软件安装的程序

    /sbin和/usr/sbin       root用户使用,存放系统管理程序

    /opt             存放可选的操作系统组件和第三方应用程序

    第一个Linux程序:Hello World程序

    hello.c

    #include<stdio.h>
    #include<stdlib.h>
    
    int main(){
    
      printf( "Hello World
    " );
      exit(0);          
    }

    gcc -o hello hello.c

    ./hello 即可运行打印Hello World

    Linux开发时一些重要的目录和文件介绍:

    1 应用程序

    一般在 /usr/bin 、/usr/local/bin、/opt中

    2 头文件

    一般在 /usr/include中

    编译时可以使用-I标志来包含保存在子目录或者非标准位置中的头文件,如:gcc -I/usr/openwin/include fred.c

    可以用grep命令搜索包含某些特定关键字的文件,如 grep EXIT_ *.h  在当前目录下所有以.h结尾的文件中搜索字符串EXIT_

    3 库文件

    库是一组预先编译好的函数的集合。   标准库文件一般位于/lib 和 /usr/lib中

    库文件名字总是以lib开头,随后的部分指明是什么库(c代表C语言库,m代表数学库)。文件名的最后部分以.开始,然后给出库文件的类型:

      .a 代表 静态库

      .so 代表 共享库

    可以通过给出完整的库文件路径名或用-l标志来告诉编译器要搜索的库文件:

      gcc -o fred fred.c /usr/lib/libm.a 等价于

      gcc -o fred fred.c -lm (-lm是简写方式,代表的是标准库目录中名为libm.a的函数库)

    可以通过-L标志为编译器增加库的搜索路径:

      gcc -o x11fred -L/usr/openwin/lib x11fred.c -lX11    这条命令用/usr/openwin/lib目录中的libX11库来编译和链接程序x11fred

    4 静态库

    也称为归档文件,惯例一般以.a结尾

    实验:创建自己的静态库,包含两个函数,然后在一个示例程序中调用其中的某一个函数

    步骤1:为两个函数分别创建自己的源文件fred.c和bill.c,内容分别为:

    fred.c
    
    #include<stdio.h>
    
    void fred( int arg ){
    
        printf( "fred: we passed %d
    ", arg );
    }
    
    bill.c
    
    #include<stdio.h>
    
    void fred( char* arg ){
    
        printf( "fred: we passed %s
    ", arg );
    }

    步骤2:分别编译这些函数以产生要包含在库文件中的目标文件

      gcc -c bill.c fred.c    -c选项是阻止编译器创建一个完整的程序,当然此时即使试图创建一个完整的程序也不会成功,因为fred.c和bill.c中尚未定义main函数

      此时当前目录下将会多两个文件 bill.o fred.o

    步骤3:为库文件创建一个头文件

      起名lib.h(随便起的名字),lib.h将声明库文件中的函数签名。同时将lib.h包含在源文件fred.c和bill.c中是个好主意

      lib.h中内容如下:

        void bill( char* );

        void fred( int );

    步骤4:编写调用bill函数的源程序program.c

    #include<stdio.h>
    #include"lib.h"  //包含库的头文件!!!
    
    int main(){
    
        bill( "Hello World" );
        exit(0);
    }

    步骤5:编译并测试program.c了

      gcc -c program.c

      gcc -o program program.o bill.o

      ./program    输出: bill: we passed Hello World

    步骤6:创建并使用一个库文件

      使用ar归档命令创建一个归档文件并将你的目标文件添加进去:

        ar crv libfoo.a bill.o fred.o    将两个目标文件使用ar命令归档到一个名为libfoo.a的静态库中去

    步骤7:为函数库生成一个内容表(该步骤一般不需要,但做了也无妨),使用ranlib命令

       ranlib libfoo.a

    至此为止,自己的库创建好了,可以如下使用:

    gcc -o program program.o libfoo.a(或者写成gcc -o program program.c libfoo.a 或者写成  gcc -o program program.c -L. -lfoo 或者写成 gcc -o program -L. program.c -lfoo, -L.表示当前目录!

    ./program

  • 相关阅读:
    Adobe Creative Cloud for Win 解决:应用程序无法正常启动(0x0000022)。请单击“确定”关闭应用程序
    项目管理 PM 第六章 时间管理
    R for mac安装 无法争取安装Unable to install any packages 安装 r 里的 igraph 报错 ERROR: configuration failed for package ‘igraph’
    Python 相对路径的解决 “Unicode Error ”unicodeescape" codec can't decode bytes… Cannot open text files in Python 3
    GraphML入门教程
    文案——编辑——希腊字母Greek Alphabet
    Tensorflow入门
    安装Tensorflow及安装过程中的错误——ModuleNotFoundError: No module named 'tensorflow'
    基于 Virtualenv 的安装Tensorflow
    小程序--腾讯地图导航
  • 原文地址:https://www.cnblogs.com/hansonwang99/p/4940955.html
Copyright © 2011-2022 走看看