fsinapsi / TreeP

A very simple programming language
GNU General Public License v3.0
4 stars 2 forks source link

opencv error during compiling #3

Open fatshotty opened 2 years ago

fatshotty commented 2 years ago

Ciao, sto provando a compilare su Ubuntu20. lancio il comando make che fallisce perche' non trova OpenCV, nonostante abbia installato tutti i pacchetti relativi, appunto, a OpenCV. In particolare fallisce cosi:

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
In file included from trpcv.c:20:
./trpcv.h:22:10: fatal error: cv.h: No such file or directory
   22 | #include <cv.h>
      |          ^~~~~~
compilation terminated.
make[1]: *** [<builtin>: trpcv.o] Error 1
make[1]: Leaving directory '/mnt/shared/treep/trpcv'
make: *** [Makefile:97: rts] Error 2

hai qualche suggerimento?

fatshotty commented 2 years ago

in realta' nel mio sistema e' stata correttamente installata la versione 4:

$ pkg-config --cflags --libs opencv4
-I/usr/include/opencv4/opencv -I/usr/include/opencv4 -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
fsinapsi commented 2 years ago

hai qualche suggerimento?

se non ti serve trpcv, ti basta commentare la riga "( cd trpcv && make ..." del Makefile principale. Purtroppo trpcv usa opencv 2, che non è compatibile con le successive. L'unico modo che conosco per compilare trpcv è quello di scaricare l'ultima release 2, cioè 2.4.13.6 (2019-02-26), compilarla e installarla. Tempo fa avevo deciso di togliere trpcv, anche perché tutte quelle funzioni sono presenti in altre librerie (trplept e trpvlfeat). L'unico motivo per cui non l'ho ancora tolta è che FFmatch funziona un po' meglio con l'implementazione SIFT di Rob Hess (rispetto a quella di VLFeat), ma quella "opensift" chiama appunto varie funzioni di opencv 2. Se non desideri compilare FFmatch, puoi commentare trpcv e dimenticartene. Altrimenti hai due possibilità: compilare opencv 2.4.13.6 (ma dovrai disinstallare il pacchetto opencv4) oppure rimuovere da ffmatch la funzione "cv-sift-features" (cerchi "cv" nei sorgenti di ffmatch e togli tutto; se hai dubbi su come farlo, chiedimi pure, qui o per email). Ti basterà poi settare "VLFeat" come metodo "SIFT impl." nelle Preferenze. FFmatch funzionerà lo stesso. Ciao PS: ho aggiornato i sorgenti di TreeP.

fatshotty commented 2 years ago

grazie della risposta e della spiegazione,. In realta' a me servirebbe avinaptic su linux (ubuntu 20) e, non trovando un pacchetto pronto, sto procedendo con la compilazione. Per fare questo mi serve TreeP, giusto? A questo punto dici che mi conviene ancora commentare le righe che dicevi? Avinaptic funzionerebbe ugualmente?

grazie

fsinapsi commented 2 years ago

In realta' a me servirebbe avinaptic su linux (ubuntu 20) e, non trovando un pacchetto pronto, sto procedendo con la compilazione. Per fare questo mi serve TreeP, giusto? A questo punto dici che mi conviene ancora commentare le righe che dicevi? Avinaptic funzionerebbe ugualmente?

sì a tutte le domande. Puoi commentare (o cancellare) le righe relative a trpcv nel Makefile principale. Facendo così, non verrà generata la libreria libtrpcv e non potrai compilare programmi che contengono funzioni il cui nome inizia con "cv-". Potrai compilare avinaptic perché non usa cv. Comunque è strano che tu sia arrivato a compilare fino a cv, che è l'ultima libreria nel Makefile. Ho provato a compilare su arch linux aggiornato la versione che c'era qui fino a oggi, e la compilazione si arresta con errore su trpavcodec (a causa di cambiamenti nelle API di libavcodec). Oggi ho aggiornato sia TreeP che avinaptic2. In teoria dovrebbero essere compilabili su sistemi aggiornati (eccetto trpcv che è legata a opencv2). Se incontri altri problemi (sulle versioni di oggi), fammi sapere. Grazie, ciao

fatshotty commented 2 years ago

ho dovuto installare un sacco di pacchetti -dev per compilare. Alla fine, anche commentando le righe che mi hai detto, ho installato treeP . Ho un altro problema. Accenno qui, poi magari possiamo sentirci in modo piu' diretto, dimmi tu.

Ho eseguito make e sudo make install su treeP . Tutto e' andato bene. Ora, lanciando make nella cartella avinaptic2 ottengo errore:

trpc -f avinaptic2.trp
make: trpc: Command not found
make: *** [Makefile:16: avinaptic2] Error 127

sicuramente avro' sbagliato qualcosa nell'installazione di treeP 🤔

fsinapsi commented 2 years ago

sicuramente avro' sbagliato qualcosa nell'installazione di treeP thinking

no, hai installato soltanto le librerie (il "run time support"). Manca il compilatore (trpc). Lo puoi compilare con il comando "make bootstrap" dalla cartella "compiler". Se tutto va bene, ottieni l'eseguibile "trpc", che puoi installare (in /usr/local/bin) con "sudo make install" dalla cartella "compiler". Il comando "trpc -v" ti stampa alcune informazioni sulla compilazione che hai fatto, e sulle versioni di alcune componenti che usa. Potresti avere problemi se in /etc/ld.so.conf (o /etc/ld.so.conf.d/) non hai /usr/local/lib (o comunque la cartella in cui installi le librerie libtrp*.so). In tal caso, basta creare un semplice file di testo dentro /etc/ld.so.conf.d/ (il nome a piacere, ad esempio "treep.conf") contenente la sola riga "/usr/local/lib". Poi con il comando "sudo ldconfig" viene aggiornato il file /etc/ld.so.cache e il linker dinamico dovrebbe trovarti le librerie. Se riesci a ottenere trpc funzionante, puoi compilare avinaptic nel modo che hai già tentato. Se incontri altri problemi, fammi sapere. Ciao

fatshotty commented 2 years ago

avro' di nuovo sbagliato qualcosa 😄 treeP e' andato bene. Ottengo questo:

$ trpc -v
This is trpc, version 0.0
compile time: Mon, 16 May 2022 14:25:29 +0200
compiled on Linux x86_64 5.17.7-arch1-1 (#1 SMP PREEMPT Thu, 12 May 2022 18:55:54 +0000) (64-bit)
running on Linux x86_64 3.10.0-1160.11.1.el7.x86_64 (#1 SMP Fri Dec 18 16:34:56 UTC 2020)
64-bit, little endian, dynamically linked, single-threaded version
CC (rts): Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
GMP version: 6.2.0

poi vado nella cartellla di avinaptic (appena clonato)

$ make
trpc -f avinaptic2.trp
trpc: pass 1 (syntax analysis)...
common.tin: file not found
in /mnt/shared/avinaptic2/avinaptic2.trp
line 13
make: *** [Makefile:16: avinaptic2] Error 255

ti ringrazio della disponibilita' Riprovero' domani e ti faccio sapere ;)

fsinapsi commented 2 years ago

avro' di nuovo sbagliato qualcosa smile treeP e' andato bene

non hai sbagliato, anzi, complimenti perché molti si arrendono subito. Hai fatto tutto bene, ma trpc non trova "common.tin" che si trova nella cartella "common" di TreeP. Per risolvere, puoi mettere la cartella "avinaptic2" nella stessa cartella in cui si trova anche "TreeP". Se non lo trova, prova a spostare la cartella "common" nella cartella "avinaptic2". Così lo trova sicuramente. Ciao

fatshotty commented 2 years ago

scusami, mi duole disturbarti, ma ora ho un altro problema legato a libmagic . E' installato, infatti la compilazione di treeP (che lo richiedeva) e' andata a buon fine. Ho copiato la cartella common come mi hai suggerito e la compilazione di avinaptic e' partita. Solo che mi si blocca perche' non trova il file libmagic.pc e quindi non puo' linkare la libreria. Sono su ubuntu20 e la versione di libmagic e' la 1.5.38. Ho cercato info in rete e pare che la versione 1.5.38 non crei il file libmagic.pc nel sistema. Sto cercando di crearlo a mano, ma senza molto successo. Sapresti aiutarmi? Per caso hai un canale telegram o discord dove possiamo interagire in modo piu' diretto senza usare le issue di gh?!

grazie ancora

fatshotty commented 2 years ago

WOW, step superato! ho usato Ubuntu 21 in una VM; ho installato libmagic; ho rintracciato il file libmagic.pc e l'ho copiato su Ubuntu20, nel path di pkgconfig. Ora ho lanciato il make su avinaptic . Ottengo questo:

trpc -f avinaptic2.trp
trpc: pass 1 (syntax analysis)...
trpc: pass 1 (code optimization)...
trpc: pass 1 (code optimization)...
trpc: pass 2 (code generation)...
trpc: pass 3 (cc)...
/usr/bin/ld: /usr/local/lib/libtrpiup.so: undefined reference to `IupFlatList'
collect2: error: ld returned 1 exit status
trpc -f avinaptic2-cli.trp
trpc: pass 1 (syntax analysis)...
trpc: pass 1 (code optimization)...
trpc: pass 1 (code optimization)...
trpc: pass 2 (code generation)...
trpc: pass 3 (cc)...
DEBUG: free bytes/heap size = 1839104/6713344

e' un output corretto? Devo lanciare qualche altro comando per rendere effettiva l'installazione?

PS: il mio ubuntu20 e' senza desktop, e' un vps in remoto :)

fsinapsi commented 2 years ago

e' un output corretto?

non è corretto, perché hai compilato avinaptic2-cli (la versione a riga di comando), ma non avinaptic2 (la versione con gui). La compilazione di avinaptic2 fallisce perché hai una versione vecchia di iup. La versione che ho io è iup-3.30. È da alcuni anni che l' "ultima versione rilasciata" è la 3.30:

http://webserver2.tecgraf.puc-rio.br/iup/

`IupFlatList' è una funzione che sembra esistere dalla 3.27:

https://www.tecgraf.puc-rio.br/iup/en/elem/iupflatlist.html

Tuttavia, anche se c'è scritto "IupFlatList (since 3.27)" inizialmente potevano averla messa in un'altra libreria. Ciò che conta è che nella 3.30 si trova sicuramente in libiup. Quindi il tuo ubuntu ti installa una versione precedente alla 3.30. Lo so che è una seccatura, ma purtroppo le librerie cambiano nel tempo.

Il problema si può risolvere facilmente in vari modi. Il più semplice è quello di cercare questa riga nel file trpiup/trpiup.c :

return trp_iup_handle( IupFlatList() );

e sostituirla con questa riga:

return UNDEF;

Poi ricompili. La nuova libtrpiup.so non conterrà riferimenti a `IupFlatList' e dovresti essere a posto (perché avinaptic2 non usa iupflatlist).

Un'altra soluzione, più impegnativa ma che ha altri vantaggi, è quella di disinstallare il pacchetto iup fornito da ubuntu, e compilare tu stesso iup. Se vuoi seguire questa seconda strada, fammi sapere.

fatshotty commented 2 years ago

ti ringrazio del supporto e della pazienza. Confermo che avinaptic2 non mi serve, in favore di avinaptic-cli . Quest'ultimo funziona correttamente sul mio ubuntu 20 🥳 Riesco ad avere l'output e anche l'analisi drf, perfattamente funzionante

Grazie ancora ;)

fsinapsi commented 2 years ago

ti ringrazio del supporto e della pazienza.

è stato un piacere. Se ti interessava solo la versione a riga di comando, dovresti essere a posto. La versione con gui ti avrebbe permesso di fare settaggi che quella a riga di comando non permette. In altre parole, avinaptic2-cli usa le impostazioni di avinaptic2, quindi l'idea sarebbe questa: lanci avinaptic2 (la prima volta viene creato avinaptic.cfg), fai le tue preferenze (tramite gui), poi puoi usare avinaptic2-cli che userà quelle preferenze. Ma se non hai esigenze particolari, avnaptic2-cli dovrebbe funzionare lo stesso. Ciao e grazie per il feedback, mi fa sempre piacere quando qualcuno riesce a compilare TreeP :)

fatshotty commented 2 years ago

piacere mio ti ringrazio ancora per le dritte, sei stato gentilissimo ;)

fatshotty commented 2 years ago

scusami, un'ultima questione. lancio avinaptic2-cli --drf FILE per estrarre anche i dati DRF. Ho 2 file. L'output e' completo solo su uno dei due; sull'altro mancano i dati DRF.

Ti viene in mente qualche situazione in cui i dati DRF non sono presenti?

fsinapsi commented 2 years ago

Ti viene in mente qualche situazione in cui i dati DRF non sono presenti?

i dati DRF non sono presenti nei filmati con un bitstream video del quale non ho scritto un parser. Alcuni esempi di bitstream dei quali non ho mai avuto tempo e voglia di analizzare: H.265/HEVC (comprende quindi x265), VP9, VP8, tutti quelli usati nei contenitori ASF/WMV (nel vecchio avinaptic c'era qualcosa, ma in questo non l'ho messo), e tanti altri. L'analisi DRF, in effetti, serve a poco, forse più a controllare che i bitstream audio supportati non abbiano problemi (per i bitstream audio vale discorso analogo: ci sono solo pochi parser). Un'ultima nota riguarda l'analisi DRF dei bitstream H.264: i valori di quantizzazione riportati nelle statistiche da avinaptic2 sono quelli specificati negli header dei frame e differiscono da quelli calcolati da x264 (questi ultimi non sono codificati nel bitstream, a quanto ne so l'unico modo per tenerne traccia è quello di conservarsi il log generato da x264 al termine di una codifica). Ciao

fatshotty commented 2 years ago

capito grazie mille