如何在 CentOs7 中安裝 guetzli

CentOs7 中安裝 guetzli 教程台盯,我的承諾,今天兌現(xiàn)。帶你上車

周六的時(shí)候收到 36kr 推送的一篇文章: Google開源新算法脖母,可將JPEG文件縮小35%

測(cè)試了結(jié)果瑟曲,驚的我目瞪口呆饮戳。如果非要我用一個(gè)詞形容的話:

牛逼

太牛逼

先來教大家如何在 CentOs7 中安裝,項(xiàng)目的說明文檔沒有很好的說明如何完成 redhat 系列的 linux 如何安裝洞拨。我是踩了不少坑才完成的扯罐。

這里邊最簡(jiǎn)單的安裝就是 mac 上了,直接通過 brew install guetzli 就ok烦衣。ubuntu 上的安裝也是滿多坑歹河,如果出了問題掩浙,也可以借鑒本文。

Guetzli 項(xiàng)目地址


首先為自己的系統(tǒng)設(shè)置epel源

# rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

上面這一步并不是必須的秸歧。我只是為了講解后面的錯(cuò)誤厨姚。

在安裝 Guetzli 之前,需要先安裝:

libpng的安裝

先說 libpng 的安裝键菱。該庫是一款C語言編寫的比較底層的讀寫PNG文件的跨平臺(tái)的庫谬墙。

如果搞不懂c語言,你也不用管他经备,簡(jiǎn)單說就是 guetzli 內(nèi)部會(huì)使用它拭抬,所以需要先把它安裝好。否則 guetzli 沒辦法讀取png圖片(并且也不能編譯通過)

這個(gè)庫可以直接通過yum來進(jìn)行安裝侵蒙。安裝出來的是 1.5.13 造虎。當(dāng)前最新的版本是 1.6.29
由于我的源里邊沒有最新版,所以這里安裝的版本就是:1.5.13

安裝命令:

yum install libpng-devel

這里一定注意纷闺,不要直接安裝 libpng 累奈。安裝 libpng-devel 會(huì)依賴安裝 libpng

ps: libpng-devel 是 用于程序操作PNG圖片的開發(fā)工具

The libpng-devel package contains header files and documentation necessary
for developing programs using the PNG (Portable Network Graphics) library.
If you want to develop programs which will manipulate PNG image format
files, you should install libpng-devel. You'll also need to install
the libpng package.

如果沒有安裝依賴成功,請(qǐng)自行手動(dòng)安裝急但。命令

yum install libpng

檢查是否安裝成功:

yum info libpng libpng-devel

看到如下內(nèi)容

已安裝的軟件包
名稱    :libpng
架構(gòu)    :x86_64
時(shí)期       :2
版本    :1.5.13
發(fā)布    :7.el7_2
大小    :602 k
源    :installed
來自源:base
簡(jiǎn)介    : A library of functions for manipulating PNG image format files
網(wǎng)址    :http://www.libpng.org/pub/png/
協(xié)議    : zlib

名稱    :libpng-devel
架構(gòu)    :x86_64
時(shí)期       :2
版本    :1.5.13
發(fā)布    :7.el7_2
大小    :211 k
源    :installed
來自源:base
簡(jiǎn)介    : Development tools for programs to manipulate PNG image format files
網(wǎng)址    :http://www.libpng.org/pub/png/
協(xié)議    : zlib

通過 yum info 命令查看已安裝的軟件選項(xiàng)澎媒。如果看到上面的結(jié)果說明安裝成功。

gflags的錯(cuò)誤安裝

為了把他安裝好波桩,搞得我神魂顛倒戒努,忘乎所以。真的是太多坑镐躲。最后通過 issue 得到了自己想要的答案储玫。下面將給大家重現(xiàn)一下我的錯(cuò)誤過程。

記得文章開頭讓大家設(shè)置的 epel 源嗎萤皂?我用 yum search gflags 找到如下信息

[root@play ~]# yum search gflags
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.nethub.com.hk
 * epel: ftp.jaist.ac.jp
 * extras: mirrors.btte.net
 * updates: mirror.lzu.edu.cn
======================================================= N/S matched: gflags =======================================================
gflags-devel.x86_64 : Development files for gflags
gflags.x86_64 : Library for commandline flag processing

因此撒穷,直接使用 yum install gflags gflags-devel

然后去編譯 Guetzli ,出現(xiàn)下面的錯(cuò)誤信息:

==== Building guetzli (release) ==== 
guetzli.cc <命令行>:0:18: 錯(cuò)誤:‘google’不是一個(gè)命名空間名 guetzli/guetzli.cc:33:17: 附注:in expansion of macro ‘GFLAGS_NAMESPACE’ using namespace GFLAGS_NAMESPACE;
^ guetzli/guetzli.cc:33:33: 錯(cuò)誤:expected namespace-name before ‘;’ token using namespace GFLAGS_NAMESPACE; 
^ guetzli/guetzli.cc: 在函數(shù)‘int main(int, char**)’中: guetzli/guetzli.cc:194:55: 錯(cuò)誤:‘SetUsageMessage’在此作用域中尚未聲明 "guetzli [flags] input_filename output_filename"); 
^ guetzli/guetzli.cc:194:55: 附注:建議的替代: In file included from guetzli/guetzli.cc:24:0: /usr/include/gflags/gflags.h:331:29: 附注: ‘gflags::SetUsageMessage’ extern GFLAGS_DLL_DECL void SetUsageMessage(const std::string& usage); 
^ guetzli/guetzli.cc:195:43: 錯(cuò)誤:‘ParseCommandLineFlags’在此作用域中尚未聲明 ParseCommandLineFlags(&argc, &argv, true); 
^ guetzli/guetzli.cc:195:43: 附注:建議的替代: In file included from guetzli/guetzli.cc:24:0: /usr/include/gflags/gflags.h:346:31: 附注: ‘gflags::ParseCommandLineFlags’ extern GFLAGS_DLL_DECL uint32 ParseCommandLineFlags(int argc, char** argv, bool remove_flags); 
^ guetzli/guetzli.cc:198:31: 錯(cuò)誤:‘ShowUsageWithFlags’在此作用域中尚未聲明 ShowUsageWithFlags(argv[0]); 
^ guetzli/guetzli.cc:198:31: 附注:建議的替代: In file included from guetzli/guetzli.cc:24:0: /usr/include/gflags/gflags.h:175:29: 附注: ‘gflags::ShowUsageWithFlags’ extern GFLAGS_DLL_DECL void ShowUsageWithFlags(const char *argv0); 
// what --help does 
^ make[1]: *** [obj/Release/guetzli.o] 錯(cuò)誤 1 
make: *** [guetzli] 錯(cuò)誤 2

錯(cuò)誤中出現(xiàn)了多處 xx在此作用域中尚未聲明 對(duì)應(yīng)的 c++ 文件剛好是:gflags.h

因此我猜測(cè)裆熙,可能是版本不對(duì)端礼。通過 yum info gflags 確認(rèn)一下當(dāng)前的版本信息

名稱    :gflags
架構(gòu)    :x86_64
版本    :2.1.1
發(fā)布    :6.el7
大小    :72 k
源    :epel/x86_64
簡(jiǎn)介    : Library for commandline flag processing
網(wǎng)址    :http://code.google.com/p/gflags
協(xié)議    : BSD

是2.1版本。因?yàn)槲襪ac上的 Guetzli 是可以運(yùn)行的入录,因此查看一下mac上的 gflags 版本蛤奥,得到如下:

gflags: stable 2.2.0 (bottled)
Library for processing command-line flags

ok,兩者之間差了一個(gè)小版本僚稿。在 gflags github 查看發(fā)布的 release 版本凡桥。看到了最新的 2.2.0 版本蚀同。然后看到其對(duì)應(yīng)的描述:

This release adds support for use of the gflags library as external dependency not only in projects using CMake, but also Bazel, or pkg-config.

我想缅刽,不管怎么樣啊掏,先試試唄。

正確安裝 gflags 新版本

由于 epel 還沒有最新的源衰猛,只能自己動(dòng)手編譯了脖律。官方編譯指南

ps: Debian/Ubuntu Linux 可以直接使用 apt-get 來安裝,但是好像有些版本也會(huì)出現(xiàn)版本問題腕侄,也可以動(dòng)手自己編譯最新的版本

由于 gflags 需要 ccmake 編譯小泉。所以需要先安裝 cmake (安裝 cmake 后,就可以使用 ccmake)

yum -y install cmake

好冕杠,搞定 cmake 微姊,接下來開始 gflags

[root@play ~]# wget https://github.com/gflags/gflags/archive/v2.2.0.tar.gz
[root@play ~]# tar -zxvf v2.2.0.tar.gz
[root@play ~]# cd gflags
[root@play ~]# mkdir build && cd build
[root@play ~]# ccmake ..

這時(shí)會(huì)有一個(gè)界面分预,用來生成 configuration files兢交,這里需要特別說明一下,建議大家進(jìn)入界面后笼痹,一直按c配喳,選項(xiàng)不明白的都不要設(shè)置,知道出現(xiàn)一個(gè)g 的時(shí)候凳干,請(qǐng) press g晴裹,截個(gè)圖

image

接著來

[root@play ~]# make
[root@play ~]# make install

ok,現(xiàn)在安裝好了gflags救赐,如果編譯過程中還有其他錯(cuò)誤涧团,應(yīng)該是少了一些支持的 lib,根據(jù)錯(cuò)誤去查一查经磅。

Guetzli安裝

前面都是為了安裝它而做的準(zhǔn)備工作泌绣,接下來就來完成它的編譯,so easy

[root@play ~]# git clone https://github.com/google/guetzli.git
[root@play ~]# make

然后會(huì)在目錄中生成一個(gè)文件

guetzli/bin/Release/guetzli

將命令移動(dòng)到自己的命令環(huán)境中预厌,就可以使用了阿迈。

[root@play ~]# guetzli
guetzli: Guetzli JPEG compressor. Usage:
guetzli [flags] input_filename output_filename

xxxxxx

  Flags from guetzli/guetzli.cc:
    -quality (Visual quality to aim for, expressed as a JPEG quality value.)
      type: double default: 95
    -verbose (Print a verbose trace of all attempts to standard output.)
      type: bool default: false

然后大家可是試一試壓縮效果。后續(xù)會(huì)有文章介紹它的壓縮效果轧叽,以及php中使用它苗沧。請(qǐng)持續(xù)關(guān)注。

我要吐槽

當(dāng)我費(fèi)勁心思解決這個(gè)問題后犹芹,作者 robryk 在issue 中告訴我崎页,最新的代碼已經(jīng)把 gflags 依賴給移除了鞠绰。因?yàn)槌霈F(xiàn)相關(guān)問題的人太多了腰埂。詳情

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜈膨,隨后出現(xiàn)的幾起案子屿笼,更是在濱河造成了極大的恐慌牺荠,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驴一,死亡現(xiàn)場(chǎng)離奇詭異休雌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肝断,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門杈曲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胸懈,你說我怎么就攤上這事担扑。” “怎么了趣钱?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵涌献,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我首有,道長(zhǎng)燕垃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任井联,我火速辦了婚禮卜壕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烙常。我一直安慰自己印叁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布军掂。 她就那樣靜靜地躺著轮蜕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝗锥。 梳的紋絲不亂的頭發(fā)上跃洛,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音终议,去河邊找鬼汇竭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛穴张,可吹牛的內(nèi)容都是我干的细燎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼皂甘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼玻驻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤璧瞬,失蹤者是張志新(化名)和其女友劉穎户辫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗤锉,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渔欢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘟忱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奥额。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖访诱,靈堂內(nèi)的尸體忽然破棺而出披坏,到底是詐尸還是另有隱情,我是刑警寧澤盐数,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布棒拂,位于F島的核電站,受9級(jí)特大地震影響玫氢,放射性物質(zhì)發(fā)生泄漏帚屉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一漾峡、第九天 我趴在偏房一處隱蔽的房頂上張望攻旦。 院中可真熱鬧,春花似錦生逸、人聲如沸牢屋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烙无。三九已至,卻和暖如春遍尺,著一層夾襖步出監(jiān)牢的瞬間截酷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工乾戏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迂苛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓鼓择,卻偏偏與公主長(zhǎng)得像三幻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呐能,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容