# Utilisation de Fmod et Leopard sur Intel



## Satcheur (13 Novembre 2007)

J'ai tenté en vain et par tous les moyens d'utiliser la librairie audio Fmod pour suivre un tuto sur le C...

Récupération de la version compilée pour Mac Os X, dépose des fichiers suivants dans le projet et ajout des liens dans mon main.c : 

fmod_errors.h
fmod.h
wincompat.g

Utilisation de la librairie Intel  : 

libfmodx86.a

Et lors de la compilation, j'obtiens 17 mortal mistakes pour lesquelles je ne trouve d'infos nulle part :rateau: 

Une idée ??

Building target Fmod of project Fmod with configuration Debug


Checking Dependencies

CompileC build/Fmod.build/Debug/Fmod.build/Objects-normal/i386/main.o /Users/Satch/Documents/C/Fmod/main.c normal i386 c com.apple.compilers.gcc.4_0
    cd /Users/Satch/Documents/C/Fmod
    /Developer/usr/bin/gcc-4.0 -x c -arch i386 -pipe -Wno-trigraphs -fpascal-strings -fasm-blocks -O0 -Wreturn-type -Wunused-variable -fmessage-length=0 -mfix-and-continue -mmacosx-version-min=10.4 -gdwarf-2 -I/Users/Satch/Documents/C/Fmod/build/Fmod.build/Debug/Fmod.build/Fmod.hmap -F/Users/Satch/Documents/C/Fmod/build/Debug -F/Users/Satch/Library/Frameworks -F/Developer/SDKs/MacOSX10.4u.sdk/Library/Frameworks -I/Users/Satch/Documents/C/Fmod/build/Debug/include -I/Users/Satch/Library/Frameworks/SDL.framework/Headers -I/Developer/SDKs/MacOSX10.4u.sdk/Library/Frameworks/SDL.framework/Headers -I/Users/Satch/Documents/C/Fmod/build/Fmod.build/Debug/Fmod.build/DerivedSources -isysroot /Developer/SDKs/MacOSX10.4u.sdk -c /Users/Satch/Documents/C/Fmod/main.c -o /Users/Satch/Documents/C/Fmod/build/Fmod.build/Debug/Fmod.build/Objects-normal/i386/main.o

Ld /Users/Satch/Documents/C/Fmod/build/Debug/Fmod.app/Contents/MacOS/Fmod normal i386
    cd /Users/Satch/Documents/C/Fmod
    /Developer/usr/bin/gcc-4.0 -o /Users/Satch/Documents/C/Fmod/build/Debug/Fmod.app/Contents/MacOS/Fmod -L/Users/Satch/Documents/C/Fmod/build/Debug -L/Users/Satch/Documents/C/Fmod/../../../Desktop/fmodapi375mac/api/lib -L/Users/Satch/Documents/C/Fmod -F/Users/Satch/Documents/C/Fmod/build/Debug -F/Users/Satch/Library/Frameworks -F/Developer/SDKs/MacOSX10.4u.sdk/Library/Frameworks -filelist /Users/Satch/Documents/C/Fmod/build/Fmod.build/Debug/Fmod.build/Objects-normal/i386/Fmod.LinkFileList -framework SDL -framework Cocoa -lfmodx86 -arch i386 -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk
Undefined symbols:
  "_SndDoImmediate", referenced from:
      _FSOUND_Output_Mac_Channel_StopSound in libfmodx86.a(output_mac.o)
      _FSOUND_Output_Mac_Channel_StopSound in libfmodx86.a(output_mac.o)
  "_NewSndCallBackUPP", referenced from:
      _CarbonSndPlayDoubleBuffer in libfmodx86.a(output_mac_carbonsndplaydb.o)
      _CarbonSndPlayDoubleBuffer in libfmodx86.a(output_mac_carbonsndplaydb.o)
  "_SPBSetDeviceInfo", referenced from:
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
  "_SndNewChannel", referenced from:
      _FSOUND_Output_Mac_Sample_Alloc in libfmodx86.a(output_mac.o)
  "_SndSoundManagerVersion", referenced from:
      _FSOUND_Output_Mac_Initialize in libfmodx86.a(output_mac.o)
  "_NMRemove", referenced from:
      _NMResponseProc in libfmodx86.a(output_mac_carbonsndplaydb.o)
  "_SndDoCommand", referenced from:
      _CarbonSndPlayDoubleBuffer in libfmodx86.a(output_mac_carbonsndplaydb.o)
      _CarbonSndPlayDoubleBuffer in libfmodx86.a(output_mac_carbonsndplaydb.o)
  "_NMInstall", referenced from:
      _CarbonSndPlayDoubleBufferCleanUpProc in libfmodx86.a(output_mac_carbonsndplaydb.o)
  "_NewNMUPP", referenced from:
      _CarbonSndPlayDoubleBuffer in libfmodx86.a(output_mac_carbonsndplaydb.o)
  "_SPBCloseDevice", referenced from:
      _FSOUND_Output_Mac_Record_Stop in libfmodx86.a(output_mac.o)
  "_SPBRecord", referenced from:
      _MyRecComp in libfmodx86.a(output_mac.o)
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
  "_SPBOpenDevice", referenced from:
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
  "_SndDisposeChannel", referenced from:
      _FSOUND_Output_Mac_Sample_Free in libfmodx86.a(output_mac.o)
  "_GetCompressionInfo", referenced from:
      _CarbonSndPlayDoubleBuffer in libfmodx86.a(output_mac_carbonsndplaydb.o)
  "_SPBStopRecording", referenced from:
      _FSOUND_Output_Mac_Record_Stop in libfmodx86.a(output_mac.o)
  "_SPBGetDeviceInfo", referenced from:
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
  "_NewSICompletionUPP", referenced from:
      _FSOUND_Output_Mac_Record_Start in libfmodx86.a(output_mac.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status


----------



## tatouille (14 Novembre 2007)

http://www.libsdl.org/


----------



## ntx (14 Novembre 2007)

En gros il te manque de symboles lors du linkage, donc il te faut ajouter des librairies à ta commande de link. Après lesquelles ??? A toi de chercher :rateau: Parfois pour les trouver Google est ton ami. Fais une recherche sur le symbole sans le "_" au début du nom.


----------



## Satcheur (15 Novembre 2007)

ntx a dit:


> En gros il te manque de symboles lors du linkage, donc il te faut ajouter des librairies &#224; ta commande de link. Apr&#232;s lesquelles ??? A toi de chercher :rateau: Parfois pour les trouver Google est ton ami. Fais une recherche sur le symbole sans le "_" au d&#233;but du nom.



Oui NTX, je chipote et je sens que c'est la voie &#224; suivre... J'ai l'impression que j'ajoute mal cette librairie &#224; mon projet  :rose: (et je ne trouve rien de pertinent sur Google, je ne dois probablement pas chercher au bon endroit)

J'ai fait le test de mettre mon .a dans le paquet de mon application (&#224; l'endroit sugg&#233;r&#233; dans le message d'erreur) et dans ce cas la compilation a r&#233;ussi. 

J'ai juste un mal fou &#224; comprendre comment se font tous ces links et m&#234;me comment influencer &#231;a... En parrall&#232;le, j'ai eu le m&#234;me soucis avec des images que j'utilise pour une application. Si je ne les ajoute pas manuellement aux dossiers "Debug" et  "Release",  mon programme ne les retrouve pas. Je m'attendais &#224; ce que Xcode les place automatiquement dans le paquet de l'application, soit ce n'est pas pr&#233;vu, soit j'ai quelque chose &#224; d&#233;couvrir 

Si tu pouvais m'aiguiller un peu, ce serait top !

Satch

[EDIT] Je suis actuellement le tuto C sur le site du zero, et si je me sens &#224; l'aise avec le code, c'est surtout l'utilisation de Xcode et la gestion des fichiers/librairies de mon projet qui me semble complexe[/EDIT]


----------



## tatouille (16 Novembre 2007)

il te manque -framework SDL
*
Oui NTX, je chipote et je sens que c'est la voie &#224; suivre... J'ai l'impression que j'ajoute mal cette librairie &#224; mon projet  (et je ne trouve rien de pertinent sur Google, je ne dois probablement pas chercher au bon endroit)*

apprend a compiler via ton terminal des choses simples et a utiliser des utilitaires comme nm otool ecetera
quand je met un lien tu nes pas supposer revenir... mais reflechir ...

man ld 
man gcc


----------



## Satcheur (16 Novembre 2007)

*il te manque -framework SDL*
Non non, il est bien installé ! C'est le premier framework avec lequel je me sois amusé  

Sinon je vais suivre ton conseil et tenter de compiler manuellement certains projets, cela me permettra d'y voir un peu plus clair sur ce qu'il se passe lors du link.


*quand je met un lien tu nes pas supposer revenir... mais reflechir ...*
Aah là, j'ai rarement autant réfléchi que pour ce problème qui me semble débile, mais, même avec google j'ai du mal à y voir clair :hein:  

Je trouve très peu de docs... ou j'ai du mal à les comprendre :rose: Je pars de zero, pour rappel...
​ 



​


----------



## ntx (16 Novembre 2007)

> En parrallèle, j'ai eu le même soucis avec des images que j'utilise pour une application. Si je ne les ajoute pas manuellement aux dossiers "Debug" et  "Release",  mon programme ne les retrouve pas. Je m'attendais à ce que Xcode les place automatiquement dans le paquet de l'application, soit ce n'est pas prévu, soit j'ai quelque chose à découvrir


Il faut les ajouter à ton répertoire Resources dans ton projet. Elles seront alors mises dans le répertoire Resources du bundle de ton application. Après pour y accéder il faut soit naviguer "à la main" à partir de ton exécutable : ../Resources/<nom de ton image> ou utiliser les fonction fournies par Apple (Cocoa ou Carbon) pour accéder aux ressources de l'application.


----------



## ntx (16 Novembre 2007)

Satcheur a dit:


> Je trouve très peu de docs... ou j'ai du mal à les comprendre :rose: Je pars de zero, pour rappel...


Dans ce cas, il te reste bien de choses à apprendre avant d'utiliser la SDL. Ce genre de librairie s'adresse à des développeurs expérimentés pas à des débutants.
Avant de faire du graphisme il faut maîtriser toutes les techniques de programmation et l'utilisation de ton compilateur. Désolé si c'est rude, mais ça ne sert à rien de griller les étapes, tu ne vas que galérer.


----------



## p4bl0 (18 Novembre 2007)

Satcheur a dit:


> *il te manque -framework SDL*
> Non non, il est bien installé ! C'est le premier framework avec lequel je me sois amusé ​



:mouais:

"-framework SDL" c'est quand tu appel gcc qu'il manque...​


----------



## ntx (18 Novembre 2007)

p4bl0 a dit:


> "-framework SDL" c'est quand tu appel gcc qu'il manque...


Lis donc la doc de gcc : "man gcc" ou encore "Developer/ADC Reference Library", tout y est


----------



## p4bl0 (18 Novembre 2007)

ntx a dit:


> Lis donc la doc de gcc : "man gcc" ou encore "Developer/ADC Reference Library", tout y est


heu mais moi j'ai d&#233;j&#224; lu en entier le man de gcc et je crois pas avoir dis une connerie l&#224; non ?


----------



## ntx (18 Novembre 2007)

p4bl0 a dit:


> heu mais moi j'ai déjà lu en entier le man de gcc et je crois pas avoir dis une connerie là non ?


La remarque était pour notre ami qui a ouvert le fil :rateau: Ta réponse est tout à fait correcte


----------



## Satcheur (18 Novembre 2007)

ntx a dit:


> La remarque était pour notre ami qui a ouvert le fil :rateau: Ta réponse est tout à fait correcte



Oui oui, il est d'ailleurs en train de la découvrir cette doc


----------



## tatouille (19 Novembre 2007)

ici tu as un chroot

-framework SDL -framework Cocoa -lfmodx86 -arch i386 -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk

pour utiliser une sdk, bien sur tu peux faire du multi targets, mais cest reserve au user level 1000
pas 1

ton framework sdl n'est pas dans les "search paths", ou l'archive de ta framework SDL ne contient pas de jeux d'instruction x86,
donc ld ne peut pas lire de symbole et les exporter


----------



## Satcheur (21 Novembre 2007)

tatouille a dit:


> ici tu as un chroot
> 
> ton framework sdl n'est pas dans les "search paths", ou l'archive de ta framework SDL ne contient pas de jeux d'instruction x86,
> donc ld ne peut pas lire de symbole et les exporter



Thanks Tatouille ! Je prends bonne note de ceci mais je ne l'utiliserai que d'ici quelques jours selon ma progression.

Je suis entrain de faire quelques exercices de compilation manuellement via gcc dans le terminal. Si tout me semblait obscur au début, je commence à comprendre pas mal de trucs et j'espère que vos réponses me sembleront triviales d'ici quelques temps :rose: 

A suivre...


----------



## tatouille (21 Novembre 2007)

-mmacosx-version-min=10.4 

cela precise que tu veux strictement un Legacy build Tiger 

voir: symbole decoration 
voir: Standard Libc UNIX98 UNIX03

sous OS x la libc est contenu dans la LibSystem


```
>$ cd /tmp
>$ echo "#include <stdio.h>" > link.c
>$ echo "int main (void) { return 0; }" >> link.c
>$ gcc link.c -o libxml_link.executable -lxml2 
>$ gcc link.c -o libiconv_link.executable -liconv
>$ gcc link.c -o libz_link.executable -lz
>$ gcc link.c -o liball_link.executable -lz -liconv -lxml2
>$ gcc link.c -o libextra_link.executable -lz -liconv -lxml2 -lcurl
>$ gcc link.c -o libxml_link2.executable -lxml2 -I/usr/include -L/usr/lib
>$ gcc link.c -o libxml_link3.executable /usr/lib/libxml2.2.dylib
```
### -I/usr/include -L/usr/lib cela est induit car standard unix paths

```
>$ export bins=`ls . | grep *.executable`
>$ for bin in $bins; do echo "-- $bin --"; otool -LX /usr/bin/$bin | awk '{print $1}'; done
>$ rm -f *.executable
```


----------



## Satcheur (21 Novembre 2007)

tatouille a dit:


> -mmacosx-version-min=10.4
> 
> cela precise que tu veux strictement un Legacy build Tiger



Ok, ce commentaire m'a permis de me rendre compte que j'avais le choix entre un "legacy built" Tiger ou Leopard au vu de ce que j'ai sur mon disque !

Pour ce qui est de la découverte de gcc et ld, je ne me sens pas encore suffisament avancé que pour compiler correctement ce que je cherche à compiler en manuel via le terminal, mais ça progresse  

Pour trouver des exemples de ce que je lis dans les man, j'essaie d'analyser les logs des erreurs générées par Xcode et j'ai tiqué là dessus : 

blablabla ...  -framework Cocoa  ... blablabla

Je me souviens avoir lu une remarque sur Cocoa/Carbon dans le readme.txt de Fmod : 

FMOD is carbon based.

:mouais:
Hum hum... ne serait-ce pas là l'explication 

Quelques petites recherches sur google m'indiquent que Carbon est l'API pour C/C++ tandis que Cocoa est l'API pour Objective C etc... Comme je code en C, je devrais plutôt utiliser Carbon non ?!

Si je suis dans le bon, je bloque depuis le début suite à un mauvais choix de type de projet lors de sa création avec Xcode :rateau:

Je vais donc "chipoter" autour de ça dans les jours qui viennent.

To be continued...


----------



## Satcheur (21 Novembre 2007)

Quelques recherches supplémentaires me laissent penser que je suis peut-être sur la bonne voie !


----------



## Satcheur (22 Novembre 2007)

Yesssss !!!  C'était bien ça 

Merci à vous pour les conseils


----------



## yox45 (23 Novembre 2007)

Salut satcheur ,  je me trouve en ce moment face au meme probleme que toi    avec l utilisation d'FMOD avec xcode    d'ailleurs je suis aussi le tuto C de m@teo21     j aurai juste souhaité avoir quelques explications sur la solution que tu as trouvé     merci


----------



## Satcheur (23 Novembre 2007)

En fait tu dois d'abord vérifier que ton projet contienne bien le framework carbon. (Si tu as utilisé le template de projet SDL, il est fort probable que tu ne trouves que le framework cocoa dans ton projet) 

S'il n'est pas là, click droit sur l'icone de ton projet - Add - existing framework... et tu vas dans /system/library/frameworks/

Tu dois également ajouter les 3 headers fournis avec Fmod et les déclarer dans main.c :

#include "fmod.h"
#include "fmod_errors.h"
#include "wincompat.h"

Pour terminer, tu ajoutes la librairie au projet : libmod.a si tu as un PPC ou bien libmodx86.a si tu as un Intel.

C'est après avoir vérifié ces points que j'ai pu compiler.


----------



## yox45 (23 Novembre 2007)

Je savais que je pouvais compter sur tes competences!! 

   c'est parfait ça fonctionne je vais pouvoir poursuivre et travailler le C !

merci encore


----------



## tatouille (26 Novembre 2007)

Satcheur a dit:


> Ok, ce commentaire m'a permis de me rendre compte que j'avais le choix entre un "legacy built" Tiger ou Leopard au vu de ce que j'ai sur mon disque !



a ce propos je vais expliquer quelque chose d'important pour tous, neophytes et non-...

si vous faites un build 10.5, sans le corefoundation carbon cocoa, pour l'utilisation d'un symbol standard libc vous devez imperativement inclure le header standard corespondant car la redecoration  des syms est definie dans les cdefs par des macros et statiquement en asm,

si vous ne le faite pas vous aurez une erreur du linker 10.5 qui dira je ne ne trouve pas _fwrite
car il attend une ref static _fwrite$UNIX2003, (gcc "switch" de "linker" suivant le target)

donc si vous utilisez des lib unix dans votre code et utilisez des functions redefinies qui elles meme utilisent des functions standards redecorees pour la conformance au standard unix03, je vous conseil
grandement de rajouter les defs standards ds votre code, meme si vous ne les utilisez pas explicitement, cela concerne uniquement, les gens qui buildent serieusement leurs applications et ajustent les flags, quand ils cross compile


----------

