Salut à tous!
Premièrement soyons clairs: je n’ai jamais utilisé de Mac (ou alors très peu).
Et cependant il me faut compiler un logiciel que j’ai fait, sur Mac.
La bête est un Mac Intel sous MacOSX.
On a installé Xcode, qui semble être bien installé puisque je peux exécuter la commande gcc en console, et je peux lancer l’interface d’Xcode.
Mon programme utilise la librairie libusb (libusb.sourceforge.net).
Je ne sais pas comment installer libusb sous Mac… la version fournie avec Xcode n’est pas compilée pour OSX d’après ce que j’ai lu.
J’ai donc décidé de compiler libusb moi même (./configure, make, make install) ce qui a marché. Seulement dans le ./configure je ne sais pas quoi mettre à “prefix=”, qui va définir où sera installée la librairie. En effet il faut que le compilateur sache où aller chercher la librairie.
De plus, et ça ne facilite pas la chose, je n’ai pas le Mac sous la main, je dois aller chez un pote pour compiler.
Si une âme charitable s’y connaît bien en développement sous Mac, je peux lui envoyer le code de mon programme pour qu’il tente de le compiler, et de m’expliquer comment je dois procéder (le programme est très petit et sa seule spécificité c’est qu’il utilise la libusb).
Je vous remercie de votre aide.
PS: sous Linux, pour compiler un programme utilisant libusb, j’utilise la commande suivante:
gcc programme.c -lusb -o fichier_exécutable
/usr/lib
Mais normalement tu n’as pas besoin de définir de préfixe, la librairie devrait s’installer dans ce répertoire par défaut.
A partir de là, tu peux utiliser la même syntaxe que sous Linux pour gcc
je n’ai pas testé de laisser par défaut B) étant donné que le tuto que j’avais trouvé donnait un prefix je pensais que c’était obligatoire.
Je testerai donc ça dès demain.
J’ai pas mon mac sous la main mais normalement tu devrais t’en sortir en faisant :
./configure --prefix=/what/you/want/
make
make install
et apres un
Bon, libusb semble correctement installé, cependant j’ai eu des erreurs à la compilation.
N’ayant eu le temps de m’y pencher sérieusement, je tenterai de voir de quoi ça vient dès que possible, et je m’en remettrai à vous si je n’arrive pas à en venir à bout B)
Salut,
Voilà, on a installé libusb avec succès, on a compilé le programme sans l’ombre d’une erreur ou d’un warning.
Le programme se lance, détecte la carte, et fonctionne correctement jusqu’à lexécution de la ligne suivante:
Le terminal sort l’erreur suivante: bus error
et le programme se termine.
Sous Linux cette fonction est exécutée sans problèmes, et le programme fonctionne.
Avez vous une suggestion pour m’aider à trouver la source de cette erreur?
PS: un ami me fait remarquer qu’il est possible que ce soit un problème de compatibilité avec le processeur Intel et OSX, la librairie n’est peut être pas prévue pour les MacIntel?
Doit-on ajouter quelque chose pour que le programme soit exécuté par Rosetta?
[quote=“bluelambda, post:6, topic: 30493”]Salut,
Voilà, on a installé libusb avec succès, on a compilé le programme sans l’ombre d’une erreur ou d’un warning.
Le programme se lance, détecte la carte, et fonctionne correctement jusqu’à lexécution de la ligne suivante:
Le terminal sort l’erreur suivante: bus error
et le programme se termine.
Sous Linux cette fonction est exécutée sans problèmes, et le programme fonctionne.
Avez vous une suggestion pour m’aider à trouver la source de cette erreur?
PS: un ami me fait remarquer qu’il est possible que ce soit un problème de compatibilité avec le processeur Intel et OSX, la librairie n’est peut être pas prévue pour les MacIntel?
Doit-on ajouter quelque chose pour que le programme soit exécuté par Rosetta?[/quote]
A priori pour que ça passe par rosetta, faut compiler le code en ppc. Je sais pas trop comment marche la cross compilation avec gcc, donc je pourais pas t’aider beaucoup plus.
Bon, c’est pas grave, à mon avis ce n’est pas la solution.
J’ai lu sur un forum un post de quelqu’un qui avait le même problème que moi (à peu près).
Il dit qu’il a utilisé le libusb pré-compilé téléchargé sur ce site, et que ça a résolu le problème:
[url=http://www.ellert.se/[/url]
Donc il me faut le fichier binary pour Tiger, que j’ai téléchargé, c’est un .tar.gz.
J’aurais normalement accès au Mac dans la soirée, et je ne sais pas du tout comment installer ce tar.gz. Il n’y a rien que je connaisse dedans. Peut être OSX saura se débrouiller avec? Comment installer ce tar.gz.
Mac OS sait decompresser le tar gz, la question est de savoir ce qu’il y a à l’interieur.
A l’intérieur, il y a un répertoire “Contents” qui contient d’autres fichiers (“Pkginfo”, “Archive.pax.gz”, “Archive.bom”, et un dossier “Ressources” qui contient des répertoires de langage (“French”, “English”…) et d’autres fichiers peu parlants, dont un ReadMe qui contient entre autres:
[quote]Installation: See the file ‘INSTALL’[/quote] mais aucun fichier Install n’est présent.
Peut être MaxOS est capable de comprendre le contenu de ce tar.gz pour l’installer?
Les fichiers se sont installés en cliquant dessus tout simplement.
Cependant j’ai toujours le “bus error”…
Je crois que le ‘bus error’ est une erreur chez BSD qui est héritée des vieux systèmes et qui correspond à segmentation fault (cf http://www.freebsd.org/doc/en_US.ISO8859-1…tml#Q2.4.1.10.).
Peut-être que tout simplement tu as un problème d’allocation mémoire dans ton programme mais que ça passe sous linux parce que la mémoire est gérée différemment.
Exact, un de mes mini-projet en C (programme de compression/decompression) marchait tres bien sur les Fedora de la fac, mais sur mon fBSD ou MacOS Bus error :-).
Essaie un coup de gdb pour voir ou ça plante. Valgrind peut aussi te venir en aide.
Le debugage en C c’est lourd.
Si ça correspond au segmentation fault, effectivement ça peut venir d’une erreur de programme, ce que je vais tenter de vérifier.
Il se peut aussi que ce segmentation fault vienne de libusb lui même, et non pas de mon programme, malheureusement.
Tu compiles avec l’option -g et tu lances ton prog avec gdb, ça va assez vite de detecter d’ou vient la segfault en C. Par contre si ça vient de libusb, ça va etre moins marrant à débuguer.
Oui, j’ai d’ailleurs trouvé un excellent récapitulatif GDB qui réunit tout ce qui me servira:
http://www.linux-france.org/article/devl/gdb_howto.html
B)
Ensuite prions pour que ça ne vienne pas de libusb.
Si c’est le cas, il est possible qu’il y ait des options particulières à passer au moment de la compilation de libusb, le tout sera de savoir lesquelles.
-----EDIT-----
GDB me donne donc l’erreur suivant au moment précis de l’exécution de la fonction usb_bulk_read():
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x0166a196 in usb_bulk_read (dev=0x302220, ep=129, bytes=0xbffffaa4 "?#", size=64, timeout=100) at darwin.c:907
907 darwin.c: No such file or directory.
in darwin.c
La fonction exacte est:
buffer est un tableau de 64 cases. J’ai essayé de le passer à 65 cases, en me disant que usb_bulk_read ajouterai un 0 à la fin, mais ça ne change rien.
T’aurais pas oublié d’initialiser ton buffer ? Parce que là ça ressemble à ça.
Initialiser, tu veux dire mettre toutes les cases à 0?
Pourquoi faudrait-il le faire sous OSX et pas sous Linux?
Je vais tester quand même, on sait jamais B)
EDIT: la remise à 0 de toutes les cases du tableau n’arrange pas le problème. Ca m’aurait étonné quand même.
Il nous faudrait un peu plus qu’une simple ligne pour t’aider à débuger…
Aucun problème, je vous envoie tout le programme, si quelqu’un se sent de s’y pencher pour m’aider:
ICI
Désolé, je n’ai pas encore mis de commentaires, c’est la première version, elle est encore assez simple, et je n’avais pas prévu de la diffuser, les explications du pourquoi du comment sont encore sur papier… mais je peux vous apporter tous les éclaircissement que vous souhaitez si vous en avez besoin.