Utilisation de Fmod et Leopard sur Intel

Satcheur

Membre confirmé
7 Septembre 2006
23
7
Charleroi (Belgique)
www.catbikers.be
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
 
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. :zen:
 
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. :zen:

Oui NTX, je chipote et je sens que c'est la voie à suivre... J'ai l'impression que j'ajoute mal cette librairie à 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 (à l'endroit suggéré dans le message d'erreur) et dans ce cas la compilation a réussi.

J'ai juste un mal fou à comprendre comment se font tous ces links et même comment influencer ça... 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 :D

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 à 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]
 
il te manque -framework SDL

Oui NTX, je chipote et je sens que c'est la voie à suivre... J'ai l'impression que j'ajoute mal cette librairie à 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
 
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...






 
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 :D
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.
 
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. :zen:
 
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

:zen:
 
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

:zen:

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...
 
-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

Bloc de code:
>$ 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
Bloc de code:
>$ export bins=`ls . | grep *.executable`
>$ for bin in $bins; do echo "-- $bin --"; otool -LX /usr/bin/$bin | awk '{print $1}'; done
>$ rm -f *.executable

 
-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 :cool:

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 :confused:

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...




 
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