• 别人的Linux私房菜(22)软件安装:源代码与Tarball


    执行make,会在当前目录查找makefile文本文件(记录了源代码如何编译的详细信息)。

    内核相关的函数信息放置在/usr/lib、/usr/lib64里。

    在Tarball(一般为xxx.tar.gz)中,软件开发商通常提供了源码,提供configure文件或config文件(检测用户的操作环境,并建立makefile文件),本软件的简易说明和安装说明。

    configure文件或config文件检测的内容包括编译器,函数库,操作系统平台,头文件等。

    软件Tarball安装步骤,将Tarball解开,gcc编译,安装。

    编辑程序代码vim,开始编译与执行,如针对h.c:gcc h.c,或gcc -c h.c#指定输出目标文件名称,gcc -o h h.o获得输出

    执行 ./h

    多文件编译与链接:编译:gcc -c thanks.c thanks_2.c,链接:gcc -o thanks thanks.o thanks_2.o,执行:./thanks

    加入优化参数的编译:gcc -O -c thanks.c thanks_2.c ,加入编译过程的详细信息如警告等:gcc -Wall -c thanks.c thanks_2.c

    -O -Wall等非必要参数标识为CFLAGS

    加入动态链接的函数库libm.so在指定的文件夹中寻找:gcc sin.c -lm -L/lib -L/lib64 #默认加入函数库了,如果加入执行函数库,如数学函数math使用的libm.so,使用-l加入函数库,m则为libm.so,-L后接寻找的目录。

    指定查找stdio的文件目录,使用-I gcc sin.c -lm -I/usr/include

    makefile的基本语法:#注释,《tab》后接命令行,目标与目标文件以:隔开。如:

     main: main.o haha.o sin_value.o cos_value.o

      gcc -o main main.o haha.o sin_value.o cos_value.o -lm
    clean:
       rm -f main main.o haha.o sin_value.o cos_value.o

    使用make命令,即可完成编译链接。使用make clean命令,完成删除.o文件。先清除目标问再编译make clean main

     修改makefile文件格式,使用变量简化:变量以$()或${}显示,shell环境可以利用CFLAGS等环境变量

    LIBS = -lm
    OBJS = main.o haha.o sin_value.o cos_value.o
    main: ${OBJS}
      gcc -o main ${OBJS} ${LIBS}
    clean:
      rm -f main ${OBJS}
    

    可以使用CFLAGS="-Wall" make clean main来进行编译链接。默认优先指令指定(makefile中的环境变量次之,shell中的环境变量随后)  

    $@:代表目前的目标(target)

    LIBS = -lm
    OBJS = main.o haha.o sin_value.o cos_value.o
    CFLAGS = -Wall
    main: ${OBJS}
    gcc -o $@ ${OBJS} ${LIBS} <==那个 $@ 就是 main !
    clean:
    rm -f main ${OBJS}
    

    在网络环境下可以使用yum安装组件:  

    安装gcc等软件开发工具:yum groupinstall "Development Tools"

    安装图形用户界面支持:yum groupinstall "X Software Development"

    软件更新:yum groupinstall "Legacy Software Development"

    获取原始文件后,tarball/usr/local/src目录下解压缩,查看INSTALL下的README文件,之后按如下步骤编译,安装。

    在Tarball中,执行./configure文件,建立Makefile,之后使用make读取clean工作,清除上次产生的.o,然后执行make命令,最后执行make install。

    如果安装位置在独立的目录,需要将安装好的软件路径写入/etc/man_db.conf文件和路径文件。

    linux发行版安装的软件在/usr下,用户自行安装的软件建议在/usr/local/下。源代码建议释放到/usr/local/src。则在这样情况下自行安装的软件,最后释放到的位置为:如果自行安装文件夹,则在自定义文件夹下也会有相应的四个目录。

     /usr/local/etc
     /usr/local/bin
     /usr/local/lib
     /usr/local/man
    

    如安装ntp:

    cd /usr/local/src
    tar -zxvf /root/ntp-4.2.8p3.tar.gz
    cd ntp-4.2.8p3
    vi INSTALL
    ./configure --help | more
    
    ./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks
    #根据之前的说明文件,自定义了安装目录/usr/local/ntp
    make clean; make
    make check
    make install
    

    使用patch更新源码:

    将第一版源码解压出以后,根据patch文件进行更新源码:

    patch -p1 < ../main_0.1_to_0.2.patch
    #其中的p1代表去掉一层目录后的对比更新。
    之后就不用改makefile,直接使用make clean main更新即可
    make install安装,make uninstall卸载

    patch还原patch -R < ../main_0.1_to_0.2.patch  

      

    静态链接库

    libxxx.a拓展名,编译直接整合到程序中,可以独立运行,生成的文件较大,升级需要重新编译。

    动态链接库

    libxxx.so拓展名,在程序中只是指针,不能独立运行,文件小,升级方便。

    将动态链接库加载到高速缓存中加快运行速度:在/etc/ld.so.conf下写入想要读取的动态链接库目录,利用ldconfig将以上读入缓存并记录备份到/etc/ld.so.cache文件。

    如:

    vim /etc/ld.so.conf.d/vbird.conf
        /usr/lib64/mysql
    
    ldconfig
    ldconfig -p#查看/etc/ld.so.cache中的数据
    

      

    判断某二进制文件含有哪些动态链接库ldd -v列出所有信息:

    如:ldd /usr/bin/passwd

    找出函数库的相关函数库:ldd -v /lib64/libc.so.6

    为了防止木马篡改,需要教研软件的正确性。在下载软件的网址上找出对应的校验值,通过

    md5sum、sha1sum、sha256sum找到软件校验值进行对比如:md5sum ntp-4.2.8p3.tar.gz。

    在本地创建以下文件的校验值,并以计划任务对比,防止篡改。

     /etc/passwd
     /etc/shadow (假如你不让用户改密码了)
     /etc/group
     /usr/bin/passwd
     /sbin/rpcbind
     /bin/login (这个也很容易被骇!)
     /bin/ls
     /bin/ps
     /bin/top
    

      

  • 相关阅读:
    ASP.NET MVC5 :Attribute路由使用详解
    C# 常用字符串加密解密方法
    C#获取当前主机硬件信息
    用C#调用Windows API向指定窗口发送按键消息
    Win32 编程消息常量(C#)
    C#程序员开发WinForm必须知道的 Window 消息大全
    C#通过SendMessage发送消息,改变其他程序的下拉框控件(ComboBox)的值
    C#常用 API函数大全
    SendKeys发送组合键
    webapi get请求 FromUri list参数传递
  • 原文地址:https://www.cnblogs.com/bai2018/p/10789948.html
Copyright © 2020-2023  润新知