Linux Mint 17에 BPG(Better Portable Graphics)를 설치하는 방법은 무엇입니까?

Linux Mint 17에 BPG(Better Portable Graphics)를 설치하는 방법은 무엇입니까?

Linux Mint 17에 BPG(Better Portable Graphics)를 설치하는 방법은 무엇입니까? 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

libbpgapt-getLinux Mint 17에 설치할 수 없는 PNG 라이브러리 버전 1.6을 사용합니다 . 이 라이브러리는 와 호환되지 않으며 libpng12다음에서 설치해야 합니다.원천(제가 사용하는 버전은1.6.16)

추가적인 문제는 PNG 1.6을 설치하는 경우 .config를 사용하여 PNG 1.6을 구성하더라도 PNG 1.6이 make계속 libbpg사용된다는 것입니다. 그리고 단순히 제거하고 이에 의존할 수는 없으며 컴파일에도 필요합니다.libpng12-devconfigure --prefix=/usrlibpng12-devlibsdl-image1.2-devlibsdl1.2-devlibbpg

패키지를 설치 libsdl-image하지 않고도 소스 코드를 다운로드하고 컴파일할 수도 있습니다 . 저는 이 경로를 따르지 않았습니다. 파일(패키지 아님)을 일시적으로 제거 하고 작업이 끝나면 다시 설치했습니다(Linux Mint 17에서는 이 내용을 복사하여 붙여넣을 수 있어야 합니다).libsdl1-devlibpng12-dev

# 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를 변경하지 않고 libpng 1.6을 찾을 수 있는 libbpg의 Makefile에 표시하는 것이 좋습니다.

그래서 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.

관련 정보