如何在 Linux Mint 17 上安装 BPG(更好的便携式图形)?

如何在 Linux Mint 17 上安装 BPG(更好的便携式图形)?

如何在 Linux Mint 17 上安装 BPG(更好的便携式图形)?我从下载了 tar.gz 文件法布里斯·贝拉德的网站。自述文件说,

编辑 Makefile 以更改编译选项(对于 Linux,默认编译选项应该可以)。输入“make”进行编译,输入“make install”安装编译后的二进制文件。

我没有编辑Makefile.我在目录中打开终端并运行make.它返回以下错误:

gcc -g -Wl,--gc-sections -o bpgdec bpgdec.o libbpg.a -lpng -lrt -lm -lpthread
bpgdec.o: In function `png_save':
/home/ghort/Downloads/libbpg-0.9.5/bpgdec.c:118: undefined reference to 
  `png_set_longjmp_fn'
collect2: error: ld returned 1 exit status
make: *** [bpgdec] Error 1

我想我在其他地方读到我需要安装 libpng16 实验性的,但我不确定。

答案1

libbpg依赖于 PNG 库的 1.6 版本,您无法apt-get在 Linux Mint 17 上安装该库。该库与 不兼容libpng12,需要从以下位置安装来源(我用的版本1.6.16

额外的复杂性是,如果您安装 PNG 1.6,即使您使用 .config 配置 PNG 1.6,make仍会libbpg使用.而且你不能只是卸载as并依赖它,编译也需要这些。libpng12-devconfigure --prefix=/usrlibpng12-devlibsdl-image1.2-devlibsdl1.2-devlibbpg

您可能还可以下载并编译 和 源代码libsdl-imagelibsdl1而不安装它们的-dev软件包。我没有遵循这条路线,我只是暂时删除了文件(而不是软件包),libpng12-dev并在完成后重新安装了它们(您应该能够在 Linux Mint 17 上复制并粘贴此文件):

# install dev packages needed 
sudo apt-get install -y libsdl-image1.2-dev libsdl1.2-dev libjpeg8-dev
#### temporarily remove the files from the libpng12 package
# this gives error messages on the directories (that cannot be removed this
# way, which can be ignored.
sudo rm $(dpkg -L libpng12-dev)

# download, configure, make and make install PNG 1.6
wget -O libpng-1.6.16.tar.xz 'http://downloads.sourceforge.net/project/libpng/libpng16/1.6.16/libpng-1.6.16.tar.xz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Flibpng%2Ffiles%2Flibpng16%2F1.6.16%2F&ts=1424607004&use_mirror=garr'
tar xf libpng-1.6.16.tar.xz
pushd libpng-1.6.16
./configure --prefix=/usr
make -j
sudo make install
popd

# download, make and make install BPG
wget http://bellard.org/bpg/libbpg-0.9.5.tar.gz
tar xf libbpg-0.9.5.tar.gz
pushd libbpg-0.9.5
make -j
sudo make install
popd

# reinstall libpng12-dev
sudo apt-get install --reinstall libpng12-dev

libpng12-dev当然,与 并行安装 PNG 1.6并适应 的源会更合适libbpg,但由于您不定期重新编译 BPG 库,IMO 这种拼凑是可以接受的。


¹您也可以尝试构建libpng16-dev,但是安装它可能只会删除-dev依赖于 的软件包libpng12-dev,我没有尝试这样做。

答案2

最好不要更改官方安装的软件包 libpng12-dev ,而是在 libbpg 的 Makefile 中指示在哪里可以找到 libpng 1.6

所以我修改了Anthon的解决方案:

# install dev packages needed 
sudo apt-get install -y libsdl-image1.2-dev libsdl1.2-dev libjpeg8-dev

# download, configure, make and make install PNG 1.6 (You coul find a newer version like 1.16.18 for me)
wget -O libpng-1.6.16.tar.xz 'http://downloads.sourceforge.net/project/libpng/libpng16/1.6.16/libpng-1.6.16.tar.xz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Flibpng%2Ffiles%2Flibpng16%2F1.6.16%2F&ts=1424607004&use_mirror=garr'
tar xf libpng-1.6.16.tar.xz
pushd libpng-1.6.16
./configure
make -j
sudo make install
#### The installation will take place in /usr/local by default and it's ok !
popd

# download, make and make install BPG
wget http://bellard.org/bpg/libbpg-0.9.5.tar.gz
tar xf libbpg-0.9.5.tar.gz
pushd libbpg-0.9.5

#### edit Makefile and insert the two following directive :
# "CFLAGS+=-I/usr/local/include" after the line CFLAGS+=-I.
# "LDFLAGS+=-L /usr/local/lib" before the line CFLAGS+=-g

make -j
sudo make install
popd

这就是大家!

答案3

这里的其他答案都很好,但我想创建一个完全自动化的安装脚本。

#!/bin/bash

sudo apt-get install -y cmake yasm libjpeg-dev libsdl-image1.2-dev libsdl1.2-dev

pushd /tmp
    wget -O libpng-1.6.21.tar.xz "https://downloads.sourceforge.net/project/libpng/libpng16/older-releases/1.6.21/libpng-1.6.21.tar.gz?ts=$(date +%s)"
    tar xf libpng-1.6.21.tar.xz
    pushd libpng-1.6.21
        ./configure
        make -j
        sudo make install
    popd
    git clone "https://github.com/mirrorer/libbpg"
    pushd libbpg
        patch <<EOF
--- Makefile    2016-02-03 11:43:37.883142427 -0500
+++ Makefile    2016-02-03 11:44:20.867143492 -0500
@@ -41,6 +41,7 @@
 CFLAGS:=-Os -Wall -MMD -fno-asynchronous-unwind-tables -fdata-sections -ffunction-sections -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -fomit-frame-pointer
 CFLAGS+=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT
 CFLAGS+=-I.
+CFLAGS+=-I/usr/local/include
 CFLAGS+=-DCONFIG_BPG_VERSION=\"\$(shell cat VERSION)\"
 ifdef USE_JCTVC_HIGH_BIT_DEPTH
 CFLAGS+=-DRExt__HIGH_BIT_DEPTH_SUPPORT
@@ -59,6 +60,7 @@
 else
 LDFLAGS+=-Wl,--gc-sections
 endif
+LDFLAGS+=-L /usr/local/lib
 CFLAGS+=-g
 CXXFLAGS=\$(CFLAGS)
EOF
        make -j
        sudo make install
    popd
popd
sudo ldconfig  # Required for bpgenc to find libpng16.

相关内容