由于最近要跑epicflow代码需要用到这几个库静态文件
正常情况只要sudo apt-get install libjpeg-dev libpng-dev就应该能安上,但是我执行完这两步后,到系统目录下只能搜到一堆类似于libjpeg.so.8、libjpeg.so.8.0.2这样的文件,而搜不到需要的libjpeg.a 、libpng.a等文件所以只能手动编译。
libjpeg下载地址: http://www.ijg.org/
libpng与libz下载地址:https://sourceforge.net/projects/libpng/files/
安装:
libjpeg:
#下载 jpegsrc.v9c.tar.gz
#解压
tar -xzvf jpegsrc.v9c.tar.gz
cd 到解压文件夹
#安装
./configure
make check#make命令是运行的所在目录下的Makefile文件, 如果Makefile 里有check的话, 会执行测试,也就是 #检查下编译出来的东西能不能用
sudo make install
sudo ldconfig#动态链接库为系统所共享,还需运行动态链接库的管理命令
#到目标文件夹/usr/local/lib找到了对应的.a文件,安装成功!!!
libpng:
#解压
tar -xzvf libpng-1.6.26.tar.gz && cd libpng-1.6.26
#安装
cd 到解压文件夹
./configure
make check
sudo make install
sudo ldconfig
zlib:
#解压:
tar -xf zlib-1.2.11.tar.xz && cd zlib-1.2.11
#安装
cd 到解压文件夹
./configure
sudo make install
sudo make
***linux中ldconfig命令 参考https://blog.csdn.net/inuyashaw/article/details/70789230
为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig.此执行程序存放在/sbin目录下.ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.
ldconfig命令行用法如下:
ldconfig [-v|–verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT]
[-l] [-p|–print-cache] [-c FORMAT] [–format=FORMAT] [-V]
[-?|–help|–usage] path…ldconfig几个需要注意的地方
- 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到
- 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到 比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在程序运行时被找到。
- 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。
- ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。
- 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。
再有,诸如libdb-4.3.so文件头中是会含有库名相关的信息的(即含“libdb-4.3.so”,可用strings命令察看),因此仅通过修改文件名以冒充某已被识别的库(如libdb-4.8.so)是行不通的。为此可在编译库的Makefile中直接修改配置信息,指定特别的库名。http:~$ sudo vim /etc/ld.so.conf 比如将当前路径作为lib链接默认搜索路径, include
/etc/ld.so.conf.d/*.conf include /usr/local/lib include . http:~$ sudo
ldconfig 这样就不用每次export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH了http:~$ vim /etc/profile 可以添加系统对应用程序的搜索路径,比如追加 umask 022
JAVA_HOME=/usr/local/jdk1.6.0_14 JRE_HOME=/usr/local/jdk1.6.0_14/jre
CLASSPATH=.: J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JRE_HOME/lib export JAVA_HOME JRE_HOME
CLASSPATH 然后使用 http:~$ source /etc/profile 是设置立即生效,或者重新打开一个terminal.
#运行可执行文件时若报错:
libpng warning: Application built with libpng-1.2.54 but running with 1.6.36
error: png_create_read_struct returned 0.
libpng warning: Application built with libpng-1.2.54 but running with 1.6.36
error: png_create_read_struct returned 0.
安装的libpng与opencv安装时的libpng冲突,解决方法把opencv卸载重安。
一、卸载 opencv3.0.0
1、查看已安装的 opencv 版本
pkg-config --modversion opencv
2、卸载
#找到当初安装 opencv的 build 目录,进入 build 目录
cd /home/***/opencv/build
sudo make uninstall
cd ..
sudo rm -r build
#清理 /usr 中所有 opencv 相关项
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
cd /usr
find . -name "*opencv*" | xargs sudo rm -rf
cd /home/***
chmod a+x opencv
rm -r opencv
3、安装
重新解压opencv文件压缩包
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libpng-dev libtiff4.dev libswscale-dev libjasper-dev ##可省略
cd到解压文件
1、mkdir build
2、cd build
3、cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local …
4、make
5、sudo make install
附opencv下载链接http://opencv.org/releases.html,选择sources版本