由於最近要跑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文件,安裝成功!!!
1
2
3
4
5
6
7
8
9
10
libpng:
#解壓
tar -xzvf libpng-1.6.26.tar.gz && cd libpng-1.6.26
#安裝
cd 到解壓文件夾
./configure
make check
sudo make install
sudo ldconfig
1
2
3
4
5
6
7
8
zlib:
#解壓:
tar -xf zlib-1.2.11.tar.xz && cd zlib-1.2.11
#安裝
cd 到解壓文件夾
./configure
sudo make install
sudo make
1
2
3
4
5
6
7
***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:JAVA
H
OME/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
1
2
3
4
#清理 /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
1
2
3
4
5
6
7
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版本