Como instalar o BPG (Better Portable Graphics) no Linux Mint 17?

4

Como eu instalo o BPG (Better Portable Graphics) no Linux Mint 17? Eu baixei o arquivo tar.gz do site Fabrice Bellard . O arquivo LeiaMe diz,

Edit the Makefile to change the compile options (the default compile options should be OK for Linux). Type 'make' to compile and 'make install' to install the compiled binaries.

Eu não editei o Makefile . Eu abri o terminal no diretório e executei make . Ele retornou o seguinte erro:

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

Eu acho que li em outro lugar que eu preciso instalar o libpng16 experimental, mas não tenho certeza.

    
por user8547 29.01.2015 / 06:32

3 respostas

6

libbpg depende da versão 1.6 da biblioteca PNG, que você não pode instalar com apt-get no Linux Mint 17. Essa biblioteca é incompatível com libpng12 e precisa ser instalada a partir de source (usei a versão 1.6.16 )

A complicação adicional é que, se você instalar o PNG 1.6, o make de libbpg ainda usará libpng12-dev , mesmo se você configurar o PNG 1.6 com configure --prefix=/usr . E você não pode simplesmente desinstalar libpng12-dev , pois libsdl-image1.2-dev e libsdl1.2-dev dependem disso, e esses são necessários para compilar libbpg também.

Você provavelmente também pode fazer o download e compilar as fontes libsdl-image e libsdl1 e não instalar seus -dev packages. Eu não segui essa rota, eu apenas temporariamente removi os arquivos (não o pacote) do libpng12-dev e os reinstalei depois que eu terminei (você deve ser capaz de copiar e colar isso no 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

É claro que seria mais apropriado instalar o PNG 1.6 em paralelo a libpng12-dev e adaptar as origens de libbpg , mas como você não recompila a biblioteca BPG regularmente, o IMO deste kludge é aceitável.

¹ Você também pode tentar e construir libpng16-dev , mas a instalação pode apenas remover o -dev packages dependendo de libpng12-dev , eu não tentei isso.

    
por 22.02.2015 / 13:45
4

É melhor não alterar o pacote instalado oficialmente libpng12-dev, mas indicar no Makefile do libbpg onde encontrar o libpng 1.6

Então modifico a solução do 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

Isso é tudo pessoal!

    
por 23.08.2015 / 14:21
4

As outras respostas aqui são ótimas, mas eu queria criar um script de instalação totalmente automatizado.

#!/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.
    
por 03.02.2016 / 17:55