linux软件管理

软件管理

Linux 上常见的软件安装方式有rpm, yum, deb, apt-get, 编译源码.

  rpm: redhat package manager
rpm     特定的压缩包
    安装rpm包就是解压压缩包, 将编译过的文件打包按一定规则解压
    rpm 命令即是解析压缩包

rpm包名

        软件名-版本号.系统标识.CPU体系(平台)[.src].rpm

        zip-3.0-11.el7.x86_64.rpm
            zip     软件名
            3.0-11  版本号
            el7     系统标识(红帽7系统编译打包)
            x86_64  CPU体系, 体系不一样互相不兼容
                noarch  此软件包与平台无关

rpm源码包

        软件名-版本号.src.rpm

    查找rpm:
        http://rpmfind.net

    安装
        rpm -ivh rpm包文件路径
            -i      安装, 第二个进度条显示安装进度
            -v      显示安装进度
            -h      检验hash, 第一个进度条

            两个进度完成代表安装成功

        对rpm源码包进入安装, 会解压到家目录的rpmbuild目录下

    查找某个命令的所属rpm包名
        rpm -qf /usr/bin/wget
            或
        rpm -qf $(which wget)

    查看当前系统安装所有rpm包
        rpm -qa

    查看是否安装某个包
        rpm -qa wget

    查看rpm包详细信息
        rpm -qi $(which wget)

    查看已安装rpm包的信息
        rpm -qR wget-1.14-15.el7_4.1.x86_64

    查看已安装rpm包会释放哪些文件信息
        rpm -ql wget-1.14-15.el7_4.1.x86_64

卸载rpm包

        格式: rpm -e rpm包名

        例:
            获取命令的路径
                which wget

            获取包名
                rpm -qf /usr/bin/wget

            卸载
                rpm -e wget-1.14-15.el7_4.1.x86_64

            一步到位
                rpm -e $(rpm -qf $(which wget))

rpm安装选项

        -U          升级安装
        -F          强制安装
        --prefix    指定安装路径, 一般推荐默认路径
        --nomd5     不检验md5值
        --test      测试在本系统是否能安装
        ...
        帮助信息: man rpm

yum

yum的命令形式一般是如下: yum –选项命令包

其中选项是可选的,选项包括-h(帮助),-y(当安装过程提示选择全部为”yes”),-q(

不显示安装的过程)等等。[command]为所要进行的操作,[package …]是操作的对象。

yum的一切信息都存储在一个叫yum.reops.d目录下的配置文件中,通常位于/etc/yum.reops.d目录下。

在这个目录下面有很多文件,都是.repo结尾的,repo文件是yum源(也就是软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!

进入/etc/yum.repo.d目录下,
vim CentOS-Base.repo

aal04s.png

[base]这个表示的是名称, #yum的ID,必须唯一,本地有多个yum源的时候,这里必须是唯一的

name=CentOS-$releasever - Base #具体的yum源名字,其实相当于对它的描述描述信息 $r releasever你可以使用这个变量参考红帽企业Linux发行版,也就是说表示当前发行版的大版本号。

baseurl是镜像服务器地址,只能写具体的确定地址。下面的例子中,只能有一个baseurl,但里面可以包含多个url

mirrorlist 是镜像服务器的地址列表,里面有很多的服务器地址。这里有一个变量$arch,cpu体系,还有一个变量:$basearch,cpu的基本体系组

baseurlmirrorlist 都是指向yum源的地址,不同点是包含地址的多少。你若自己写的话,我们一般只写一个地址,直接用baseurl 就行

gpgcheck=0 #要不要验证呢,取消验证。1,使用公钥检验rpm的正确性。

gpgcheck 若是1将对下载的rpm将进行gpg的校验,校验密钥就是gpgkey,一般自己的yum源是不需要检测的。gpgcheck=0,那么gpgkey就可以不填写

在来看一下/etc/yum.conf 文件

aalogx.png

cachedir=/var/cache/yum #yum下载的RPM包的缓存目录

keepcache=0 #缓存是否保存,1保存,0不保存。

debuglevel=2 #调试级别(0-10),默认为2

logfile=/var/log/yum.log #yum的日志文件所在的位置
1 yum清空缓存列表

1
2
3
4
5
6
7
yum clean packages      清除缓存目录下的软件包,清空的是(/var/cache/yum)下的缓存
yum clean headers 清除缓存目录下的 headers
yum clean oldheaders 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers

更新配置后yum缓存(索引缓存)
yum makecache

2 yum显示信息

1
2
3
4
5
6
7
8
9
10
11
12
13
yum list          # yum list显示所有已经安装和可以安装的程序包

这些列表里面的包的来源就是/etc/yum.repo.d。 base docker-ce-stable epel/x86_64/metalink epel extras rpmforge updates

yum list rpm 显示安装包信息rpm

显示installed ,这里是包名,版本和仓库名

yum list httpd

这里是可获得包,说明还没有安装。

yum info rpm 显示安装包rpm的详细信息

3 yum安装

1
2
3
4
5
6
7
8
9
10
11
12
13
yum -y install httpd

如果你不加-y他会问你要不要安装。如果你想自己来控制有些包是否安装,这里不要加-y,如果你想自动安装,不进行交互,这里加入-y。这个就是yum 的安装了,非常简单。

安装完之后查询一下

yum list httpd,Installed 说明已经安装好了


查找软件包释放文件包含关键词的条目 适用于知道命令,但是不知道软件名的情况下载
yum provides "/etc/mime.types"
yum provides */nslookup 这样匹配也可以
yum provides nslookup 也可以

4 yum删除

1
2
3
yum remove httpd 删除程序包httpd ,也就是卸载。

yum deplist rpm 查看程序rpm依赖情况

5 yum包的升级

1
2
3
4
5
yum check-update 检查可更新的程序

yum update 全部更新,升级所有包,以及升级软件和系统内核,这就是一键升级。他可以更新CentOS的内核到最新版本。
yum update package1 更新指定程序包package1,
yum upgrade package1 升级指定程序包package1

6 yum 解决依赖的原理

YUM 解决依赖关系问题,自动下载软件包。yum是基于C/S架构。C指的是客户端, S指的是服务器,想ftp,http,file、关于yum为什么能解决依赖关系:所有的Yum 源里面都有repodata,它里面是有XML格式文件,里面有说明需要什么包。例如上堂课实验的:mysql-server rpm 需要:perl-DBI ,python,或者是php等等包。

7 yum 组的管理

yum进行安装的时候可以一组一组的进行安装,先来看看有那些组yum grouplist 。可用的组有这么多。

Available Environment Groups:首先是可用的环境分组。

Compute Node 计算节点

Infrastructure Server 基础设施服务器

File and Print Server 文件和打印服务

Cinnamon Desktopv Cinnamon桌面

Installed Groups :已安装的组,开发工具

Development Tools

Available Groups:可用的组。

如果我们想以组的方式来安装,加入我想安装安全工具:

输入:yum groupinstall "Security Tools"

看到这里询问是否要安装,当然是N不安装了。如果想直接安装,不询问的话,这里也在后面加上选项 –y。
yum groupremove group1 删除程序组group1

根据包名查找软件名

    yum search vim

重装软件
    yum reinstall vim -y

查看软件组
    yum grouplist "GNOME Desktop"

安装软件组   这时候init 5 可以切换到桌面模式
    yum groupinstall "GNOME Desktop"

卸载软件组 卸载后就不可以init 5 切换了
    yum groupremove "GNOME Desktop"

常用的yum 命令

  yum list                              <-- 列出yum源中提供的所有软件
  yum grouplist                         <-- 以分组的形式列出yum源中提供的所有软件
  yum search screen                     <-- 搜索名字或者描述信息中包含了字符串screen的包
  yum provides "*bin/screen"            <-- 搜索提供了某个文件的包
  yum install screen                    <-- 安装名为screen的包
  yum remove screen                     <-- 删除名为screen的包
  yum groupinstall "Development tools"  <-- 安装名为Development tools的一组包
  yum groupremove "Development tools"   <-- 删除名为Development tools的一组包
  yum deplist screen                    <-- 查看包screen的依赖关系
  yumdownloader --destdir=/tmp screen   <-- 把screen的安装包从仓库下载下来,放到/tmp里面
  yum clean all                         <-- 清空yum 的数据库等

配置本地yum 源:

  1. 理解yum 的原理和yum 源的架构(结构)
    1.1 yum 的配置文件
    1.2 rpm 文件及相关数据
    1.3 yum 运行的时候会检查配置,从配置里面得知软件的各种信息

     其中就包括了rpm 的位置,是否检查签名,等等。
  2. 准备材料 (iso 文件)
    mkdir /yum <– 预备目录
    mount -ro loop centos.iso /yum <– 挂载iso
    或者:
    mount /dev/sr0 /yum

  3. 书写yum 的配置文件
    3.1 yum 源里面有仓库
    3.2 yum 的配置文件存放在 /etc/yum.repos.d 目录里面

     名字必须以 .repo 结尾
     sudo mkdir back_repo
     sudo mv Centos-* ./back_repo
     sudo vim local.repo
     假设iso 挂载在 /yum,则可以这样书写仓库信息:
     -------------------------------------
     [repodata]      <-- 标题
     name=repodata           <-- 名字
     baseurl=file:///yum/    <-- rpm 的位置
     enabled=1               <-- 是否启用该仓库, 0不启用, 1启用
     gpgcheck=0              <-- 是否检查rpm 包的数字签名
     -------------------------------------
    
     清空yum已存在的所有源信息
         yum clean all
     查看本地源的所有软件
         yum list
    
     测试:
         拔掉网线运行命令
         sudo yum install vim -y
         看结果是没有网路还是软件包是最新的
    
     开机自动挂载
     sudo vim /etc/fstab
     /dev/sr0     /yum      iso9660     loop,defaults   0 0
     iso光盘文件的路径           挂载文件     格式    光盘挂载的格式   开机不自检
    
     设置开机自动挂载后,配置写错,会导致开不了机,需要重新配置

配置yum源

配置最快yum源

1
2
yum install yum-fastestmirror -y 
资源真的是非常丰富,从Centos到Ubuntu,ISO镜像、升级包,应有尽有,

yum源安装软件常见报错

报错一,yum源路径网络问题

1
2
3
4
5
yum makecache  更新Yum仓库报错。

修改epel.repo文件,
把#baseurl 这行的注释打开。
把metalink 这个注释掉。保存退出

报错二证书问题。

1
2
3
4
5
6
7
centos下安装完EPEL源然后更新一下yum缓存如果发现这样的错误:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
这就表明你需要更新CA证书了,那么只需要更新CA证书就可以,不过在此同时需要临时禁用epel源并更新就可以了,命令如下:
yum --disablerepo=epel -y update ca-certificates
或者
yum update -y ca-certificates
然后在 yum makecache 就可以了。

报错三网络问题

1
2
3
4
有时候 iptables ouput 出数据有问题,把udp类型的数据改为可以出,相关代码为
iptables -A OUTPUT -p udp -m state --state new,established -j ACCEPT
iptables -A OUTPUT -p all -m state --state new,established -j ACCEPT
然后 yum makecache 就可以了。

报错四yum源网络问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
使用 yum安装的时候

解决方案

1.首先进入 /etc/yum.rebpos.d 目录备份文件 CentOS-Base.repo,执行

cp CentOS-Base.repo CentOS-Base.repo.bak
2.修改CentOS-Base.repo文件

htpp://mirrors.cloud.aliyuncs.com/centos/批量替换为 http://mirrors.aliyun.com/centos

执行:

%s#http://mirrors.cloud.aliyuncs.com/centos/#http://mirrors.aliyun.com/centos#g
3.备份epel.repo文件

http://mirrors.cloud.aliyuncs.com/centos/批量替换为http://mirrors.aliyun.com/centos,执行

cp epel.repo epel.repo.bak
4.修改epel.repo文件

%s#http://mirrors.cloud.aliyuncs.com#http://mirrors.aliyun.com#g
5.执行

yum -y update

报错五yum源镜像缓慢

1
2
3
4
5
6
7
8
9
10
11
yum源。
先把原来的CentOs-Base.repo 源进行重命名。或者禁用。然后选择下面的源。

yum-config-manager --add-repo=http://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all 清除缓存

重新构建rpm库
rpm --rebuilddb

然后在yum makecache fast

Linux yum-config-manager命令YUM配置管理

功能描述

使用yum-config-manager命令可以进行YUM配置管理。

命令语法

yum-config-manager [选项] [部分]

选项含义

-e<错误级别> 错误输出级别
选项 含义
-d<调试级别> 调试输出级别
-c<配置文件> 指定配置文件的位置
-t 错误宽容
-q 安静模式
-v 详细操作
-y 对所有问题回答yes
–installroot=<路径> 设置安装根路径
–nogpgcheck 禁用GPG签名检查
–disableplugin=<插件> 按名称禁用插件
–color=<颜色> 控制使用颜色
–setopt=<设置选项> 设置任意配置和软件仓库选项
–noplugins 禁用yum插件
–enableplugin=<插件> 按名称启用插件
–enablerepo=<软件仓库> 启用一个或多个仓库
–rpmverbosity=<调试级别> 为rpm指定调试输出级别
–disablerepo=<软件仓库> 禁用一个或多个软件仓库
–disablepresto 禁用Presto插件,不下载任何deltarpm
-C 从系统缓存中完全运行,不更新缓存
-R<等待时间> 最大命令等待时间,单位是分钟
–showduplicates 在软件仓库,在列表/搜索命令中显示重复的
-x<软件包> 按名称或排除软件包
–obsoletes 在更新过程中启用废弃处理
–save 保存当前的选项
–enable 启用指定的软件仓库
–disable 禁用指定的软件仓库
–add-repo=<软件仓库> 从指定文件或URL添加(和启用)软件仓库

进行YUM配置管理。
[root@localhost ~]# yum-config-manager

安装yum-config-manager命令

系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了。

1
yum -y install yum-utils

列:

从指定url中添加启用yum软件仓库

1
yum-config-manager --add-repo=http://mirrors.aliyun.com/repo/Centos-7.repo

显示main和repos foo和bar的配置:

1
yum-config-manager main foo bar

使用–enable显示启用的软件仓库:

1
yum-config-manager --enable

禁用软件仓库epel

1
yum-config-manager --disable epel

启用软件仓库epel

1
yum-config-manager --enable epel

打包/解包(tar)

选项
    -f      指定操作文件
    -c      打包
    -x      解包
    -C      指定解包路径
    -v      显示过程
    -t      列表包内容
    -r      追加 (同一文件会追加多次)
    -u      更新 (文件不存在追加,文件存在对比时间进行更新操作)
    -d      对比包内容
    --delete    删除包内容
    -z      调用gzip工具(czf 代表打包压缩, xzf 代表解压解包)
    -j      调用bzip2工具(cjf 代表打包压缩, xjf 代表解压解包)
    -J      调用xz工具(cJf 代表打包压缩, xJf 代表解压解包)

打包

    格式: tar -cf 压缩之后的文件路径    要进行压缩的文件夹路径...

        tar -cf /tmp/etc.tar /etc/

        打包etc到标准输出, 用于与其它组合使用
            tar -cf - /etc/

打包过滤文件或目录
    tar -cf /tmp/etc.tar /etc/ --exclude=wgetrc --exclude=vim

万能压缩

格式: tar -cf 压缩之后的文件路径    要进行压缩的文件夹路径...
tar  -czf  /tmp/etc.gz  /etc
#把access.log 日志打包压缩,保存在/etc/nginx/logs/目录下。命名为access.log.gz

tar -czf /etc/nginx/logs/access.log.gz /etc/nginx/logs/access.log 2&> /dev/null

解包

    格式: tar -xf 解包文件路径 [指定提取文件...] [-C 指定解压路径]

        tar -xf /tmp/etc.tar

        tar -xf /tmp/etc.tar -C /dev/shm/

        tar -xf /tmp/etc.tar wgetrc

查看包
    格式: tar -tf 查看包的路径

更新包
    格式: tar -uf 压缩包路径 要追加的文件或目录路径...

删除包内容
    格式: tar -f 包路径 --delete 要删除文件或目录

对比包内容
    格式: tar -df 包路径 对比文件或目录路径

gzip格式打包压缩
    tar -czf etc.tar.gz /etc

gzip格式解压
    tar -xzf etc.tar.gz

bzip2格式打包压缩
    tar -cjf etc.tar.gz /etc

bzip2格式解压
    tar -xjf etc.tar.gz

万能解压

    tar -xf etc.tar
    tar -xf etc.tar.gz
    tar -xf etc.tar.bz2
    tar -xf etc.tar.xz

压缩/解压

windows:
    winrar  *.rar (收费)
    winzip  *.zip

linux:
    compress *.Z (过时)
    gzip     *.gz / *.tar.gz / *.tgz
    bzip2    *.bz2 / *.tar.bz2
    xz       *.xz  / *.tar.xz

    zip/unzip   *.zip
    rar      *.rar

    压缩: 先用tar进行打包,再调用对应压缩工具进行压缩
    解压: 先调用对应压缩工具解压,再用tar进行解包

gzip

    压缩
        gzip 文件

        不删除原文件压缩
            gzip -c 文件 > gz压缩文件

    解压
        gzip -d gz压缩文件

    查看gz压缩文件
        zcat gz压缩文件
        zless gz压缩文件

    对比两个gz压缩文件
        zcmp gz压缩文件1 gz压缩文件2

bzip2

    压缩
        bzip2 文件

        不删除原文件压缩
            bzip2 -c 文件 > bz2压缩文件

    解压
        bzip2 -d bz2压缩文件

xz
    用法与bzip2/gzip工具一样

zip

    压缩
        zip -r zip压缩名 要压缩的文件或目录...

    解压
        unzip zip压缩名

rar

    压缩
        rar a rar压缩名 要压缩的文件或目录路径...

    解压
        rar x rar压缩名
            保留压缩包里目录结构

        rar e rar压缩名
            将压缩包的文件直接提取, 不保留压缩包目录结构

GPG - 文件加密

非对称加密(公钥/私钥) RSA算法
    公钥负责加密, 私钥负责解密
GNUPG开源工具实现非对称加密

安装:
    centos: yum install gnupg -y

查看当前系统所有密钥对
    gpg --list-keys

创建密钥对
    gpg --gen-key
        1. 选择什么加密算法(推荐默认, 直接按回车)
        2. 确定密钥长度 (默认为2048)
            1024 2048 4096(长度越长越安全, 生成密钥时间就越久)
        3. 确定密钥的有效时间 (默认为永不过期)
        4. 确认以上是否正确
        5. 输入密钥信息(姓名 邮箱 注释)
        6. 输入密钥保护密码

加密
    gpg -r 密钥标识 [-o 加密生成文件路径] -e [准备要加密的文件]
        默认生成加密文件格式为二进制, 通过-a选项指定生成文件格式为文本格式
        如果不指定加密生成文件路径,则输出到标准输出
        如果加密文件不指定则读标准输入
        密钥标识为生成密钥对的时候输入的真实姓名或者邮箱

    加密/etc/passwd文件, 生成文本加密文件到/tmp/test/gpg.file
        gpg -r 1234567@163.com -o /tmp/test/gpg.file -a -e /etc/passwd

解密
    gpg -r 密钥标识 [-o 解密生成文件路径] -d [gpg加过密的文件]
        如果不指定解密生成文件, 解密到标准输出
        如果不指定加过密的文件, 将标准输入作为源文件

公钥导出
    格式: gpg [-a] -o 公钥导出路径 --export 密钥标识

        gpg -a -o public.key --export 1234567@163.com

私钥导出
    格式: gpg -a -o 私钥导出路径 --export-secret-keys 密钥标识

        gpg -a -o private.key --export-secret-keys 1234567@163.com

密钥导入
    格式: gpg --import 密钥导出文件

    私钥导入设置密钥信任(不设置每次加密都会提示信任问题):
        gpg --edit-key 1234567@163.com trust quit
            选择5最高信任级别, 再按Y确认退出

上传公钥
    gpg --keyserver hkp://keys.gnupg.net --send-keys 公钥ID

查找公钥
    gpg --keyserver hkp://keys.gnupg.net --search-keys 公钥标识

源码包编译安装

大部分源码包使用autoconf项目自动生成编译环境

源码包即是压缩包, 首先必须解压并且进入解压后目录
    tar -xf wget-1.14.tar.xz
    cd wget-1.14
        INSTALL     安装帮助文档

        ./configure --help 获取安装帮助信息

清除上一次编译情况

    make clean
    make disclean

探测操作系统环境是否满足本项目的依赖 (配置项目功能)
    ./configure
        如果没有任何错误才能进行下一步
        错误一般都依赖的工具或库没有安装或者版本不对

编译

    sudo make -j4
        -j4 代表开多核执行

安装

    sudo make install

卸载

    sudo make uninstall

作业: centos7安装以下源码包

rpm源码包安装演示
wget-1.14-15.1.src.rpm

终端打字程序
ptyping-1.0.1.tar.gz

支持ntfs格式挂载
ntfs/ntfs-3g-2009.4.4.tgz

mplayer播放器
MPlayer-1.2.tar.xz
yasm

星际译王
stardict/stardict-3.0.2.tar.bz2
计算机词库:
stardict-kdic-computer-gb-2.4.2.tar.tar

sudo yum install gcc -y

./configure --disable-gucharmap --disable-festival

scene.hpp +21 NULL
    NULL -> 0

依赖:
    intltool
        sudo yum install intltool -y

    gnome-doc-utils
        sudo yum install gnome-doc-utils

    enchant-devel
        sudo yum install enchant-devel

    gucharmap-devel
        安装之后还会提示错误, 版本不对应
        通过禁用此插件来继续编译
            ./configure --disable-gucharmap

    festival-devel
        安装之后还会提示错误
            ./configure --disable-gucharmap --disable-festival
            6-rhel-6/naulinux-school-x86_64/stardict-3.0.2-1.el6.x86_64.rpm/download/

    espeak-devel
        sudo yum install espeak-devel -y

    libgnomeui-2.0-devel
        sudo yum install libgnomeui-devel

    libz
        sudo yum install gcc-c++  -y

    scrollkeeper-config
        sudo yum install scrollkeeper -y

坦克大战
662206tank-sdl-0.3.0.tar.gz

sudo yum install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev -y

仙剑1

1
2
3
4
5
6
7
8
9
sdlpal
cd sdlpal/code
make clean
make
vim nbproject/Makefile-Release.mk
LDLIBSOPTIONS=-lm -lSDL
cp dist/Release/GNU-Linux-x86/sdlpal ..
cd ..
./sdlpal

编译C代码遇到通用问题:
问题: 找不到*.h文件
解决: 绝对使用-I解决
已知依赖的*.h文件在哪(不知道则需要查找系统或者百度)

    通过-I选项告诉gcc我们头文件在哪
        gcc -I/kyo/code/include

    Makefile里通过CFLAGS变量来指定头文件路径
        CFLAGS=-I/kyo/code/include

问题: libSDL.so: undefined reference to `_XGetRequest'
解决: 绝对使用-l解决
    Makefile里通过LDFLAGS 或 LIBS变量来指定库
        LDFLAGS=-lX11
        LIBS=-lX11

问题: ld: 找不到 -lSDL
解决: 绝对使用-L解决
    Makefile里通过LDFLAGS 或LIBS 变量来指定库的路径
        LDFLAGS=-L/kyo/code/lib -lSDL -lSDL_image -lSDL_mixer -lX11

问题: error while loading shared libraries: libSDL_image-1.2.so.0
解决: 前提系统已安装好此库,并且知道库所在路径
    系统标准库路径: /usr/lib /lib

    临时解决: 通过LD_LIBRARY_PATH环境变量来指定库路径
        export LD_LIBRARY_PATH=/kyo/code/lib
        ./tank

    永久解决: /etc/ld.so.conf
        将依赖库路径追加到/etc/ld.so.conf, 再刷新动态库路径: sudo ldconfig

sdl库源码包

sdl

编译SDL-1.2:
    错误: operand type mismatch for `movq'
    解决: ./configure --disable-assembly

    错误: ./src/video/x11/SDL_x11sym.h:168:17: error: conflicting types for ‘_XData32’
    解决: vim ./src/video/x11/SDL_x11sym.h +168
        SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return)

    错误: undefined reference to `_XGetRequest'
    解决: vim Makefile +171
        LIBS =  -L/kyo/code/lib -Wl,-rpath,/kyo/code/lib -lSDL -lpthread -lX11

评论


:D 一言句子获取中...

加载中,最新评论有1分钟缓存...