Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Quattro modi di indossarlo, stessa app del Plaud Note Pro e integrazione con il desktop. Il registratore IA da indossare di Plaud eccelle in mobilità, ma resta vincolato all'abbonamento ed è facile da perdere
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-06-2010, 18:40   #1
Kodert89
Junior Member
 
Iscritto dal: Mar 2008
Messaggi: 22
[C] Help cannot find -lmsg

Salve ,
sto facendo un progetto per l'università e ho scritto del codice in c , ci hanno dato un makefile dove aggiungere solo le parte necessarie a far compilare in nostro progetto ma lanciando il make mi da un errore:

Codice:
gcc -o msgserv msgserv.o comsock.o genList.o genHash.o gthread.o -L ../lib -lmsg -lpthread
/usr/bin/ld: cannot find -lmsg
collect2: ld returned 1 exit status
make: *** [msgserv] Error 1
Ora l'errore pare essere il -lmsg l'opzione del gcc.
Purtroppo non ho la minima idea di che cosa sia quell'opzione.
Naturalmente sto facendo girare tutto su linux (debian squeeze 64bit).

Se qualcuno potesse illuminarmi su quale sia il problema , ne sarei grato.
Kodert89 è offline   Rispondi citando il messaggio o parte di esso
Old 29-06-2010, 07:30   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Vuole linkare una fantomatica libreria libmsg.so, che sinceramente non trovo tra le librerie presenti nei repository. Probabilmente viene creata dal tuo progetto.
Posta il makefile.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 30-06-2010, 08:22   #3
Kodert89
Junior Member
 
Iscritto dal: Mar 2008
Messaggi: 22
Non so come ma si è risolto da solo , ho provato levando l'opzione e mi è partito , qundo la ho rimessa non ha dato problemi .
Ma praticamente con -lmsg andrebbe a cercare la libreria msg ? come funzionerebbe il comando , tanto per capire.
Kodert89 è offline   Rispondi citando il messaggio o parte di esso
Old 30-06-2010, 08:26   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
-lnome (-l seguito dal nome della libreria) va a cercare di caricare la libreria (statica o dinamica, dipende dalle opzioni passate) che ha come nome libnome.a (statica) o libnome.so (dinamica).
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 30-06-2010, 13:37   #5
Kodert89
Junior Member
 
Iscritto dal: Mar 2008
Messaggi: 22
Quindi se non la trova nella cartella che gli passo io la va a cercare in /usr/bin/ld e non trovandola mi ritorna errore , quindi il problema è nel codice e non nel fatto che mi manca una libreria nel sistema.
Grazie dell'aiuto!
Kodert89 è offline   Rispondi citando il messaggio o parte di esso
Old 30-06-2010, 14:31   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Kodert89 Guarda i messaggi
quindi il problema è nel codice e non nel fatto che mi manca una libreria nel sistema.
Esatto, sempre che quella libreria venga creata dal codice, ed io questo non lo so perché non ho visto il Makefile.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2010, 08:53   #7
Kodert89
Junior Member
 
Iscritto dal: Mar 2008
Messaggi: 22
Premetto che è da poco che metto mano su un makefile e quindi ho poca esperienza .
Comunque , dove c'è scritto da completare lo ho aggiunto io , apparte nel primo frammento che non dovevo aggiungere nulla perchè usavo solo i suoi file, se ti servono altre info riguardo ai file a cui fa riferimento dimmelo perchè ci metterei una vita a spiegarteli tutti , comunque il problema è solo lanciando il test3.. perchè gli server msgserv e msgcli che usano quella libreria.
Codice:
#################################################
#
# Makefile progetto lso 2010
# (fram 1)(fram 2)(fram 3)
#################################################

# ***** DA COMPLETARE ******  con i file da consegnare
# primo frammento
FILE_DA_CONSEGNARE1=./genList.c ./genHash.c 

# secondo frammento
FILE_DA_CONSEGNARE2=./logpro 

# terzo frammento
FILE_DA_CONSEGNARE3=./msgserv.c ./msgcli.c ./Makefile ./logpro ./genList.c ./genHash.c ./genHash.h ./comsock.c 


# Compiler flags
CFLAGS = -Wall -pedantic -g 
# aggiungere -lgcov o -fprofile-arcs al linking

# Compilatore
CC = gcc


# Librerie
LIBDIR = ../lib
LIBS = -L $(LIBDIR)

# Nome libreria
LIBNAME = libmsg.a

# Lista degli object files (** DA COMPLETARE ***)
OBJS = genList.o genHash.o comsock.o

# nomi eseguibili test primo frammento
exe1 = msg_test1
exe2 = msg_test2


# phony targets
.PHONY: clean lib test11 test12 docu consegna1
.PHONY: test21 consegna2
.PHONY: test31 test32 test33 consegna3


# creazione libreria
lib:  $(OBJS)
	-rm  -f $(LIBDIR)/$(LIBNAME)
	ar -r $(LIBNAME) $(OBJS)
	cp $(LIBNAME) $(LIBDIR)

# eseguibile di test 1 (primo frammento)
$(exe1): genList.o test-genList.o
	$(CC) -o $@ $^ 

# eseguibile di test 2 (primo frammento)
$(exe2): $(OBJS) test-genHash.o
	$(CC) -o $@ $^ 

# dipendenze oggetto main di test 11
test-genList.o: test-genList.c genList.h
	$(CC) $(CFLAGS) -c $<

# dipendenze oggetto main di test 12
test-genHash.o: test-genHash.c genHash.h genList.h
	$(CC) $(CFLAGS) -c $<

# make rule per gli altri .o del primo frammento (***DA COMPLETARE***)





msgserv: msgserv.o comsock.o genHash.o genList.o 
	$(CC) -o $@ $^ $(LIBS) -lmsg -lpthread

msgcli: msgcli.o comsock.o
	$(CC) -o $@ $^ $(LIBS) -lmsg -lpthread

# make rule per i .o del terzo frammento (***DA COMPLETARE***)
msgserv.o: msgserv.c genHash.h genList.h comsock.h
	$(CC) $(CFLAGS) -c $<

msgcli.o: msgcli.c genHash.h genList.h 
	$(CC) $(CFLAGS) -c $<







########### NON MODIFICARE DA QUA IN POI ################
# genera la documentazione con doxygen
docu: ../doc/Doxyfile
	make -C ../doc

#ripulisce
clean:
	-rm -f *.o *.~

# primo test primo frammento
test11: 
	make clean
	make $(exe1)
	echo MALLOC_TRACE e\' $(MALLOC_TRACE)
	@echo MALLOC_TRACE deve essere settata a \"./.mtrace\"
	-rm -f ./.mtrace
	./$(exe1)
	mtrace ./$(exe1) ./.mtrace
	@echo -e "\a\n\t\t *** Test 1-1 superato! ***\n"

# secondo test primo frammento
test12: 
	make clean
	make $(exe2)
	echo MALLOC_TRACE e\' $(MALLOC_TRACE)
	@echo MALLOC_TRACE deve essere settata a \"./.mtrace\"
	-rm -f ./.mtrace
	./$(exe2)
	mtrace ./$(exe2) ./.mtrace
	@echo -e "\a\n\t\t *** Test 1-2 superato! ***\n"

# test secondo frammento
test21: 
	cp DATA/logtest.* .            
	chmod 644 ./logtest.*       
	./logpro ./logtest.dat > ./outtest    
	diff ./outtest ./logtest.check  
	@echo -e "\a\n\t\t *** Test 2-1 superato! ***\n"

# primo test terzo frammento 
test31: msgserv msgcli lib
	-killall -w msgserv  
	-killall -w msgcli   
	cp DATA/userlist .   
	cp DATA/userlist2 .  
	cp DATA/out31.check . 
	chmod 644 userlist userlist2 out31.check
	-rm -fr tmp/   
	-mkdir tmp 
	./testparse 2>.err 
	diff ./out31 ./out31.check 
	@echo -e "\a\n\t\t *** Test finale 3-1 superato! ***\n" 

# secondo test terzo frammento 
test32: msgserv msgcli lib  
	-killall -w msgserv  
	-killall -w msgcli   
	cp DATA/userlist .   
	cp DATA/outcli?.check . 
	chmod 644 ./userlist 
	chmod 644 ./outcli?.check
	-rm -fr tmp/          
	-mkdir tmp 
	./testfunz 
	diff ./outcli1 ./outcli1.check 
	diff ./outcli2 ./outcli2.check 
	diff ./outcli3 ./outcli3.check 
	@echo -e "\a\n\t\t *** Test finale 3-2 superato! ***\n" 

# terzo test terzo frammento 
test33: msgserv msgcli lib   
	-killall -w msgserv  
	-killall -w msgcli   
	cp DATA/userlist .   
	cp DATA/logsort.check .   
	chmod 644 userlist  
	chmod 644 logsort.check
	-rm -fr tmp/           
	-mkdir tmp 
	./testpar  
	@echo -e "\a\n\t\t *** Test finale 3-3 superato! ***\n" 

# target di consegna primo frammento
SUBJECT1="lso10: consegna primo frammento"
consegna1: 
	make test11
	make test12
	./gruppo-check.pl < gruppo.txt
	tar -cvf $(USER)-f1.tar ./gruppo.txt ./Makefile $(FILE_DA_CONSEGNARE1)

	@echo -e "\a\n\t\t *** Frammento 1 consegnato  ***\n"

# target di consegna secondo frammento
SUBJECT2="lso10: consegna secondo frammento"
consegna2: 
	make test21
	./gruppo-check.pl < gruppo.txt
	tar -cvf $(USER)-f2.tar ./gruppo.txt $(FILE_DA_CONSEGNARE2)
	@echo -e "\a\n\t\t *** Frammento 2 consegnato  ***\n"

# target di consegna terzo frammento
SUBJECT3="lso10: consegna terzo frammento"
consegna3: 
	make test11
	make test12
	make test21
	make test31
	make test32
	make test33
	./gruppo-check.pl < gruppo.txt
	tar -cvf $(USER)-f3.tar ./gruppo.txt $(FILE_DA_CONSEGNARE3)
	@echo -e "\a\n\t\t *** Progetto finale consegnato  ***\n"

Ultima modifica di Kodert89 : 01-07-2010 alle 08:55.
Kodert89 è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2010, 09:00   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Manca chiaramente la generazione della libreria
LIBNAME = libmsg.a
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2010, 19:28   #9
Kodert89
Junior Member
 
Iscritto dal: Mar 2008
Messaggi: 22
Scusa la domanda forse sciocca ma come faccio a dirgli di generarla?

Questo
Codice:
lib:  $(OBJS)
	-rm  -f $(LIBDIR)/$(LIBNAME)
	ar -r $(LIBNAME) $(OBJS)
	cp $(LIBNAME) $(LIBDIR)
non la genera ? lib viene richiamato dopo msgserv e msgcli , forse deve essere richiamato prima senno non trova la libreria.

Codice:
test31: msgserv msgcli lib
	-killall -w msgserv  
	-killall -w msgcli   
	cp DATA/userlist .   
	cp DATA/userlist2 .  
	cp DATA/out31.check . 
	chmod 644 userlist userlist2 out31.check
	-rm -fr tmp/   
	-mkdir tmp 
	./testparse 2>.err 
	diff ./out31 ./out31.check 
	@echo -e "\a\n\t\t *** Test finale 3-1 superato! ***\n"
Kodert89 è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2010, 19:36   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sì, viene creata lì, ma non mi sembra ci sia la dipendenza lib nelle regole in cui si usa -lmsg
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2010, 09:28   #11
Kodert89
Junior Member
 
Iscritto dal: Mar 2008
Messaggi: 22
Cioè ti puoi spiegare meglio ?
Non credo di aver capito .
Non so se è importante ma prima nel msgservr cera una bara così:
Codice:
msgserv: msgserv.o comsock.o /
	$(CC) -o $@ $^ $(LIBS) -lmsg -lpthread
Siccome non mi girava l'ho tolta , anche perchè non so cosa significa una barra messa li.
Comunque può darsi che quello che manca celo devo inserire io .
Kodert89 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2010, 09:45   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
lib è una regola del makefile... Ci siamo ?

msgserv è un'altra regola. Se una regola dipende da un'altra solitamente si fa in modo di eseguire quella regola prima della regola dipendente.

msgserv: msgserv.o comsock.o

Quelle in grassetto sono dipendenze, ma come vedi non c'è la dipendenza lib Che ovviamente ci va messa.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-07-2010, 10:29   #13
Kodert89
Junior Member
 
Iscritto dal: Mar 2008
Messaggi: 22
Quindi se metto

msgserv: msgserv.o comsock.o lib

non dovrebbe più darmi problemi.
Ma la
\
che cosa significa se messa nella riga delle dipendenze (nell'altro posto avevo sbagliato barra), mi dava problemi nel compilare dicendomi che mi mancavano delle dipendenze .

E un altra cosa perchè scrivere che msgserv dipende da msgserv.o e comsock.o
quando nelle dipendenza di msgserv.o c'è già comsock.h .
Se metto

msgserv: msgserv.o comsock.o

allora devo mettere anche
genList.o genHash.o
Kodert89 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
TIM lancia il Pass Mondiali DAZN: 104 pa...
Tesla Roadster, promessa o miraggio? La ...
Mark Hamilton, la tavola periodica del m...
Hanger 13 annuncia Uomo d'Onore: espansi...
La battaglia delle HBM4 entra nel vivo: ...
Dopo 12 anni torna Alien: Isolation. Ecc...
ADATA Trusta ridurrà i costi di i...
SpaceX fornirà 110.000 GPU NVIDIA...
Hyundai IONIQ 6 N-Line, prova in antepri...
Sospesi i lavori di riparazione delle pe...
Formula V vi farà cambiare l'airf...
Netflix usa l'IA generativa per battere ...
Quando l'AI costruisce sé stessa:...
Meno ventole, più raffreddamento:...
Adidas Trionda: come funziona la tecnolo...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v