Forum : 6 - Le MIDI

Linux pSeudo MIDI Input - problème de compilation

Sasaki utilisateur non connecté
Salut, dans la même veine que midijoystick j'ai trouvé celui-ci

http://lsmi-all.sourceforge.net/

qui permet d'utiliser son vieux clavier ou sa vielle souris en tant que contrôleur midi. Il a aussi une option pour les joysticks et les Monterey International MK-9500 / K617W reversible keyboard.

J'ai créé un nouveau fil de forum plutôt que de continuer dans midijoystick pour aller avec la page wiki que je vais créer dans la foulée. Je suis actuellement en train de lire le README et la compilation paraît un peu compliquée : il faut s'assurer que le bon kernel et les bons headers alsa-lib sont installés (mais le readme ne dit pas lesquels) et il faut donner au soft les droits d'accès aux fichiers dans /dev/input.

Je vais essayer de compiler ça, mais je vais certainement me planter très vite, alors toute aide sera appréciée ;-)

olinuxx utilisateur non connecté France
Super cette nouvelle page !

Sasaki utilisateur non connecté
J'ai réussi à localiser le paquet (libasound2-dev) qui contient les fichiers nécéssaires à la compilation et j'ai indiqué cela sur la page wiki : Linux pSeudo MIDI Input .

Je bloque à l'étape suivante comme ceci :

sudo make 

cc -g -Wall -pedantic -lasound    lsmi-keyhack.c seq.o sig.o   -o lsmi-keyhack
/tmp/ccPkZsZP.o : Dans la fonction « clean_up » :
/home/pikachu/Bureau/lsmi/lsmi-keyhack.c:239 : référence indéfinie vers « snd_seq_close »
/tmp/ccPkZsZP.o : Dans la fonction « main » :
/home/pikachu/Bureau/lsmi/lsmi-keyhack.c:617 : référence indéfinie vers « snd_seq_parse_address »
/home/pikachu/Bureau/lsmi/lsmi-keyhack.c:620 : référence indéfinie vers « snd_seq_connect_to »
seq.o : Dans la fonction « open_client » :
/home/pikachu/Bureau/lsmi/seq.c:19 : référence indéfinie vers « snd_seq_open »
/home/pikachu/Bureau/lsmi/seq.c:22 : référence indéfinie vers « snd_seq_set_client_name »
seq.o : Dans la fonction « open_output_port » :
/home/pikachu/Bureau/lsmi/seq.c:32 : référence indéfinie vers « snd_seq_create_simple_port »
seq.o : Dans la fonction « send_event » :
/home/pikachu/Bureau/lsmi/seq.c:48 : référence indéfinie vers « snd_seq_event_output_direct »
collect2: error: ld returned 1 exit status
make: *** [lsmi-keyhack] Erreur 1


J'avais cette même erreur pour chacun des modules du soft : monterey, joystick et mouse. Je les ai retirés du makefile pour voir, car seul m'intéresse le keyhack pour l'instant, mais il y a toujours ce problème de référence indéfinie... Je sais pas ce que ça veut dire.

Edit : Un indice ici : https://openclassrooms.com/forum/sujet/gcc-references-indefinies-42195

Il semblerait qu'une librairie n'ait pas été "linkée" correctement et qu'il faille la linker dans la ligne de commande au départ. Si quelqu'un peut m'aider à adapter ça à la situtation...

Sasaki utilisateur non connecté
Bon je suis un peu perdu :

si j'en crois ce qu'il y a indiqué ici https://www.developpez.net/forums/d1424230/general-developpement/programmation-systeme/linux/gtk/reference-indefinie-vers/ il faudrait compiler avec gcc en utilisant l'argument -i suivi du répertoire où se trouvent les librairies appropriées (en grand nombre si j'en crois les différents #include présents dans les fichiers.c du soft)

OR il y a un makefile, qui si j'ai bien compris l'openclassroom sur gcc, est une simplification de gcc, pour éviter d'avoir à se taper toutes les commandes de compilation. Donc on ne devrait pas faire

gcc -g -wall -pedantic -i /usr/include etc. (je sais pas ce qu'il faut mettre après)


mais un simple make devrait suffire, le développeur est censé indiquer les références aux bonnes librairies dans son makefile.

Le voici,:

LIBS=-lasound
CFLAGS=-g -Wall -pedantic $(LIBS)

.PHONY : clean all

BINS=lsmi-monterey lsmi-joystick lsmi-mouse lsmi-keyhack 

all: $(BINS)

clean:
	rm -f $(BINS)

seq.o: seq.c seq.h

sig.o: sig.c

OBJS=seq.o sig.o

lsmi-monterey: lsmi-monterey.c $(OBJS)

lsmi-joystick: lsmi-joystick.c $(OBJS)

lsmi-mouse: lsmi-mouse.c $(OBJS)

lsmi-keyhack: lsmi-keyhack.c $(OBJS)

install: $(BINS)
	install $(BINS) /usr/local/bin


Le makefile définit bien la valeur LIBS dès le début, alors pourquoi diable quand on compile il ne trouve pas ???

NicolasJ utilisateur non connecté
Une réponse 5 ans plus tard (mieux vaut tard tout ça tout ça).

Je suis parvenu à compiler les drivers en me passant du makefile. Ce qui a marché est de mettre la référence à la librairie lasound à la fin de la commande du compiler. Donc :

Depuis le répertoire lsmi/
$cc -g -Wall -pedantic lsmi-keyhack.c seq.o sig.o -o lsmi-keyhack -lasound

Même chose pour les 3 autres drivers lsmi-.c et -o lsmi-

En revanche je n'ai pas encore testé le programme.
EDIT : lsmi-mouse marche parfaitement !