如何在 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-dev
configure --prefix=/usr
libpng12-dev
libsdl-image1.2-dev
libsdl1.2-dev
libbpg
您可能还可以下载并编译 和 源代码libsdl-image
,libsdl1
而不安装它们的-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.