View Full Version : link a librerie [cmake]
Salve a tutti,
non sono nuovissimo del forum ma di questa sezione, e soprattutto di linux, si..
Dovrei utilizzare una libreria opensource (robotvision), messa a disposizione dall'Imperial College di Londra.
Ci sto sbattendo da un po' ed ho dovuto anche cambiare versione di linux (ora uso UBUNTU 10.04) solo per preparare l'nstallazione che, ovviamente, adesso non va.
Il problema sono delle librerie e credo sia legato a questa parte di codice del file CMakeLists:
SET (LIB_NAMES GL cblas atlas cvd lapack f77blas ) #jpeg png tiff
.....
SET (LIBS "")
FOREACH(lib ${LIB_NAMES})
FIND_LIBRARY(LIB_${lib} ${lib})
IF (LIB_${lib})
MESSAGE(STATUS "found library '${lib}': ${LIB_${lib}}")
ELSE (LIB_${lib})
MESSAGE(FATAL_ERROR "cannot find library '${lib}' - this will not work ...")
ENDIF (LIB_${lib})
cambiando l'ordine di ricerca riesce a trovare solo GL (in usr/lib/libGL.so )
liblapack, libcvd sono di sicuro installate ma non sono in quel percorso.
Volevo sapere come opera il FIND_LIBRARY e dove effettua la ricerca; inoltre è possibile specificare nel cmakelist dove cercare oppure c'è un modo per copiare la libreria o un collegamneto ad essa nella cartella dove viene effettuata la ricerca?
Grazie in anticipo
P.S.: non so se sia la sezione giusta ma in caso contrario mi scuso e vi prego di spostarmi o indicarmi dove postare
Gimli[2BV!2B]
05-06-2012, 20:27
Tutte le librerie installate tramite pacchetto devono finire in path canonici raggiungibili, salvo errori di pacchettizzazione (rari perché una cosa del genere è piuttosto eclatante) oppure pasticci come librerie embedded duplicate (solitamente in pacchetti non free).gimli@kwankey:~$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
gimli@kwankey:~$ cat /etc/ld.so.conf.d/*.conf
# Multiarch support
/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu
/lib/i486-linux-gnu
/usr/lib/i486-linux-gnu
# libc default configuration
/usr/local/lib
gimli@kwankey:~$ echo $LD_LIBRARY_PATH
LD_LIBRARY_PATH è la variabile d'ambiente che permette di scavalcare localmente le impostazioni globali dell'ld.so.conf
Si dovrebbe evitare di usarla, se non in casi disperati o durante fasi di sviluppo. (http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html)
Se le librarie non sono installate e non si sa in che pacchetto siano lo strumento principe in distribuzioni della famiglia Debian è apt-file (http://guide.debianizzati.org/index.php/Apt-file:_ricerca_all'interno_dei_pacchetti):gimli@kwankey:~$ apt-file search libGL.so
libgl1-fglrx-glx: /usr/lib/i386-linux-gnu/fglrx/fglrx-libGL.so.1.2
libgl1-fglrx-glx: /usr/lib/i386-linux-gnu/fglrx/libGL.so.1
libgl1-mesa-dev: /usr/lib/i386-linux-gnu/libGL.so
[...]
gimli@kwankey:~$ apt-file search liblapack.so
libatlas-base-dev: /usr/lib/atlas-base/atlas/liblapack.so
libatlas3-base: /usr/lib/atlas-base/atlas/liblapack.so.3
libatlas3-base: /usr/lib/atlas-base/atlas/liblapack.so.3.0
libatlas3gf-base: /usr/lib/atlas-base/atlas/liblapack.so.3gf
libatlas3gf-base: /usr/lib/atlas-base/atlas/liblapack.so.3gf.0
liblapack-dev: /usr/lib/lapack/liblapack.so
[...]
gimli@kwankey:~$ apt-file search libcvd.so
Di libcvd non ho trovato traccia in Debian Sid (non ho nemmeno controllato cosa sia).
Se le hai installate manualmente da qualche parte dovresti poterle utilizzare esportando la variabile nella shell in cui poi lancerai il make o integrandola nel makefile stesso. (http://stackoverflow.com/questions/787684/set-ld-library-path-from-makefile)
Grazie mille!!
Con questo comando mi trova tutte le librerie eccetto libcvd che ho installato io in effetti :/
ma allora come mai quando provo ad installare la libreria con il comando "cmake .." non me le trova? dove potrei metter mano secondo te?
Mi rendo conto che detto così è forse un po' astratto ma davvero non so che fare :mc:
Gimli[2BV!2B]
06-06-2012, 23:07
CMake è una bestia diversa, ho trascurato questo dettaglio.
Nelle prove ho utilizzato i sorgenti prelevati dall'svn:svn co https://svn.openslam.org/data/svn/robotvision
Si può osservare un indizio prima dell'errore:-- LIB PATH:
-- found library 'lapack': /usr/lib/liblapack.so
-- found library 'f77blas': /usr/lib/libf77blas.so
-- found library 'cblas': /usr/lib/libcblas.so
-- found library 'atlas': /usr/lib/libatlas.so
-- found library 'GL': /usr/lib/i386-linux-gnu/libGL.so
CMake Error at CMakeLists.txt:37 (MESSAGE):
cannot find library 'cvd' - this will not work ...
Controllando nel file CMakeLists.txt, prima del punto in cui va in erore:SET (PROJECT_NAME robotvision)
PROJECT(${PROJECT_NAME})
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
OPTION (OPENCV_SUPPORT "opencv support" ON)
IF (OPENCV_SUPPORT)
add_definitions(-DRV_OPENCV_SUPPORT)
ENDIF()
# override by appending -DCMAKE_BUILD_TYPE=Debug to cmake argument list
IF( NOT CMAKE_BUILD_TYPE )
SET( CMAKE_BUILD_TYPE Release )
add_definitions(-DRV_BUILD_RELEASE)
ENDIF()
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall ")
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall ")
MESSAGE(STATUS "LIB PATH: ${CMAKE_LIBRARY_PATH}")
[...]Ecco una variabile interessante: CMAKE_LIBRARY_PATH (http://www.cmake.org/cmake/help/cmake2.6docs.html#variable:CMAKE_LIBRARY_PATH)
Proviamo.gimli@kwankey:~/Scrivania/robotvision/robotvision/build$ cmake -DCMAKE_LIBRARY_PATH:PATH=/home/gimli/Scrivania/robotvision/libcvd ../trunk
-- LIB PATH: /home/gimli/Scrivania/robotvision/libcvd
-- found library 'lapack': /usr/lib/liblapack.so
-- found library 'f77blas': /usr/lib/libf77blas.so
-- found library 'cblas': /usr/lib/libcblas.so
-- found library 'atlas': /usr/lib/libatlas.so
-- found library 'GL': /usr/lib/i386-linux-gnu/libGL.so
-- found library 'cvd': /home/gimli/Scrivania/robotvision/libcvd/libcvd.so
[...]Nel mio caso la cosa si ferma subito dopo, causa mancanza libcv.so (credo di averne a disposizione solo una versione troppo recente che contiene modifiche nell'organizzazione delle librerie), spero che a te vada meglio.
il problema è che nonostante apt-file search trovi le varie librerie
fdf@fdf-pc:~$ apt-file search liblapack.so
libatlas-base-dev: /usr/lib/atlas/liblapack.so
libatlas3gf-base: /usr/lib/atlas/liblapack.so.3gf
libatlas3gf-base: /usr/lib/atlas/liblapack.so.3gf.0
liblapack-dev: /usr/lib/liblapack.so
liblapack3gf: /usr/lib/liblapack.so.3gf
liblapack3gf: /usr/lib/liblapack.so.3gf.0
revolution-mkl: /usr/lib/R/lib/liblapack.so
revolution-mkl: /usr/lib/R/lib/liblapack.so.3gf
fdf@fdf-pc:~$ apt-file search libcv.so
libcv-dev: /usr/lib/libcv.so
libcv4: /usr/lib/libcv.so.4
libcv4: /usr/lib/libcv.so.4.0.0
fdf@fdf-pc:~$ apt-file search libf77blas.so
libatlas-base-dev: /usr/lib/libf77blas.so
libatlas3gf-base: /usr/lib/libf77blas.so.3gf
libatlas3gf-base: /usr/lib/libf77blas.so.3gf.0
[...]
il cmake mi da errore o.O
fdf@fdf-pc:~/robotvision/trunk/build$ sudo cmake ..
-- LIB PATH:
CMake Error at CMakeLists.txt:37 (MESSAGE):
cannot find library 'lapack' - this will not work ...
-- Configuring incomplete, errors occurred!
provo a dargli /usr/lib come path ma non va comunque
Gimli[2BV!2B]
07-06-2012, 20:32
Aspetta, apt-file non trova le librerie che hai nel tuo sistema, ma ti dice in quale pacchetto si trovano.
Hai effettivamente installato il pacchetto liblapack-dev, per esempio?apt-get install liblapack-devSe sono installate controlla la presenza del file (uso sempre la lapack per esempio)ls -la /usr/lib/liblapack.so
P.S. Se avevi modificato il file CMakeLists.txt riprova con quello originale.
Aaaahh!! OK! Grazie mille!
perdona l'ignoranza...
ora quel passo è andato ma il successivo "make" da problemi proprio con alcuni file della libreria cvd .. Non li trova perchè li cerca in cvd/!!
fdf@fdf-pc:~/robotvision/trunk/build$ sudo make
[ 10%] Building CXX object CMakeFiles/robotvision.dir/gui_view.cpp.o
In file included from /home/fdf/robotvision/trunk/gui_view.cpp:27:
/home/fdf/robotvision/trunk/gui_view.h:32:33: error: libcvd/cvd/image_io.h: No such file or directory
In file included from /home/fdf/robotvision/trunk/gui_view.h:34,
from /home/fdf/robotvision/trunk/gui_view.cpp:27:
/home/fdf/robotvision/trunk/gui_window.h:31:26: error: cvd/glwindow.h: No such file or directory
In file included from /home/fdf/robotvision/trunk/gui_window.h:33,
from /home/fdf/robotvision/trunk/gui_view.h:34,
from /home/fdf/robotvision/trunk/gui_view.cpp:27:
/home/fdf/robotvision/trunk/rectangle.h:28:26: error: cvd/image_io.h: No such file or directory
il mio percorso sarebbe libcvd/cvd/
ci litigo un pochino e magari ti chiamo in aiuto
ho reinstallato libcvd ed ora è andata..altri problemi ma cerco di risolvere da solo
Ancora grazie infinite!!
ps: ho un problema col microfono non riesco a farlo funzionare..tutte le guide che pure ci sono per sony vaio non mi aiutano..dove posso postare?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.