Compiler une librairie C

2»

Réponses

  • schlumschlum Membre
    11:46 modifié #32
    dans 1184615733:

    Dans la note technique d'Apple, ils mettent :
    CFLAGS="-O -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
    LDFLAGS="-arch i386 -arch ppc"
    ./configure --prefix=${HOME}/Hello --disable-dependency-tracking


    Ca c'est pour faire de l'universal binary directement... C'est mieux même.
  • AliGatorAliGator Membre, Modérateur
    11:46 modifié #33
    Heu déjà  en général le "./configure" il sert à  des trucs comme ça justement.
    A faire la préparation, à  configurer le make selon les options qu'on veut.

    En général si le script "configure" est bien foutu, il suffit de taper "./configure --help" pour avoir la liste des options qu'il te permet de personnaliser. Et si ça se trouve, y'a le type d'architecture (ça ne m'étonnerait pas des masses d'ailleurs).

    Sinon, regarder dans le makerfile, c'est là  que sont définies les variables comme $CFLAGS qui indiquent les options utilisées lors de la compilation avec gcc. Si ./configure ne te permet pas de modifier l'archi cible, tu peux modifier ça dans le makefile avant de relancer ton script "make" (attention à  sauvegarder avant la version pour l'autre processeur, pour au final avoir les 2 versions, ppc et intel, pour pouvoir faire le "lipo")
  • schlumschlum Membre
    11:46 modifié #34
    CFLAGS (et consorts) sont fait pour ça : définir des flags qui ne sont pas gérés par le "configure" ou le "make"
    Ca m'étonnerait fort qu'un "configure" gère l'architecture, ce n'est pas son boulot  ???

    Par exemple, pour développer avec les bibliothèques de Fink, on définit :

    export CFLAGS=-I/sw/include<br />export LDFLAGS=-L/sw/lib<br />export CXXFLAGS=$CFLAGS<br />export CPPFLAGS=$CXXFLAGS
    
  • UniXUniX Membre
    juillet 2007 modifié #35
    Bon voilà  ou j'en suis.

    J'ai regardé l'aide du configure. Il y est indiqué que pour spécifier une architecture particulière, il faut utiliser la variable d'environnement CFLAGS. Donc on ne peut rien faire dans le configure.

    Puis, j'ai essayé :
    CFLAGS="-arch ppc"
    make

    CFLAGS="-O -g -isysroot -arch ppc"
    make

    CFLAGS="-O -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
    LDFLAGS="-arch i386 -arch ppc"
    make

    A chaque fois il me créé bien une bibli libbsb.a, mais lorsque je compile dans Xcode mon projet qui l'utilise, j'ai toujours le même message :
    "warning ../Frameworks/libbsb.a archive's cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (can't load from it)"
  • AliGatorAliGator Membre, Modérateur
    11:46 modifié #36
    Une fois que tu as donné une valeur à  CFLAGS (ou CPPFLAGS ou CXXFLAGS, etc), il me semble qu'il est de bon ton de relancer ./configure avant le make, le script configure pouvant aussi se servir de ces flags pour configurer le makefile.
    En tout cas ça coute pas grand chose et comme ça peut être la cause de ton pb...

    Sinon, selon le shell que tu utilises, la syntaxe pour donner une valeur à  une variable d'environnement peut varier, attention ("var=valeur", "set var=valeur", etc)
  • UniXUniX Membre
    11:46 modifié #37
    En fait, ne sachant pas trop le fonctionnement, j'ai à  chaque fois fait :
    Définition CFLAGS
    ./configure
    Définition CFLAGS
    make

  • schlumschlum Membre
    11:46 modifié #38
    Est-ce que les "-arch ..." apparaissent bien dans les lignes de compilation lors du "make" ??
  • UniXUniX Membre
    11:46 modifié #39
    A priori non.

    Voilà  ce que j'ai lorsque je fais un make :
    Making all in .<br />if gcc -DPACKAGE_NAME=&#092;&quot;&#092;&quot; -DPACKAGE_TARNAME=&#092;&quot;&#092;&quot; -DPACKAGE_VERSION=&#092;&quot;&#092;&quot; -DPACKAGE_STRING=&#092;&quot;&#092;&quot; -DPACKAGE_BUGREPORT=&#092;&quot;&#092;&quot; -DPACKAGE=&#092;&quot;libbsb&#092;&quot; -DVERSION=&#092;&quot;0.0.7&#092;&quot; -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1&nbsp; -I. -I. -I.&nbsp; &nbsp; -g -O2 -W -Wall -Werror -MT bsb_io.o -MD -MP -MF &quot;.deps/bsb_io.Tpo&quot; -c -o bsb_io.o bsb_io.c; &#092;<br />then mv -f &quot;.deps/bsb_io.Tpo&quot; &quot;.deps/bsb_io.Po&quot;; else rm -f &quot;.deps/bsb_io.Tpo&quot;; exit 1; fi<br />rm -f libbsb.a<br />ar crv libbsb.a bsb_io.o <br />a - bsb_io.o<br />ranlib libbsb.a<br />if gcc -DPACKAGE_NAME=&#092;&quot;&#092;&quot; -DPACKAGE_TARNAME=&#092;&quot;&#092;&quot; -DPACKAGE_VERSION=&#092;&quot;&#092;&quot; -DPACKAGE_STRING=&#092;&quot;&#092;&quot; -DPACKAGE_BUGREPORT=&#092;&quot;&#092;&quot; -DPACKAGE=&#092;&quot;libbsb&#092;&quot; -DVERSION=&#092;&quot;0.0.7&#092;&quot; -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1&nbsp; -I. -I. -I.&nbsp; &nbsp; -g -O2 -W -Wall -Werror -MT bsb2ppm.o -MD -MP -MF &quot;.deps/bsb2ppm.Tpo&quot; -c -o bsb2ppm.o bsb2ppm.c; &#092;<br />then mv -f &quot;.deps/bsb2ppm.Tpo&quot; &quot;.deps/bsb2ppm.Po&quot;; else rm -f &quot;.deps/bsb2ppm.Tpo&quot;; exit 1; fi<br />gcc&nbsp; -g -O2 -W -Wall -Werror&nbsp;  -o bsb2ppm&nbsp; bsb2ppm.o libbsb.a <br />if gcc -DPACKAGE_NAME=&#092;&quot;&#092;&quot; -DPACKAGE_TARNAME=&#092;&quot;&#092;&quot; -DPACKAGE_VERSION=&#092;&quot;&#092;&quot; -DPACKAGE_STRING=&#092;&quot;&#092;&quot; -DPACKAGE_BUGREPORT=&#092;&quot;&#092;&quot; -DPACKAGE=&#092;&quot;libbsb&#092;&quot; -DVERSION=&#092;&quot;0.0.7&#092;&quot; -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1&nbsp; -I. -I. -I.&nbsp; &nbsp; -g -O2 -W -Wall -Werror -MT ppm2bsb.o -MD -MP -MF &quot;.deps/ppm2bsb.Tpo&quot; -c -o ppm2bsb.o ppm2bsb.c; &#092;<br />then mv -f &quot;.deps/ppm2bsb.Tpo&quot; &quot;.deps/ppm2bsb.Po&quot;; else rm -f &quot;.deps/ppm2bsb.Tpo&quot;; exit 1; fi<br />gcc&nbsp; -g -O2 -W -Wall -Werror&nbsp;  -o ppm2bsb&nbsp; ppm2bsb.o libbsb.a <br />if gcc -DPACKAGE_NAME=&#092;&quot;&#092;&quot; -DPACKAGE_TARNAME=&#092;&quot;&#092;&quot; -DPACKAGE_VERSION=&#092;&quot;&#092;&quot; -DPACKAGE_STRING=&#092;&quot;&#092;&quot; -DPACKAGE_BUGREPORT=&#092;&quot;&#092;&quot; -DPACKAGE=&#092;&quot;libbsb&#092;&quot; -DVERSION=&#092;&quot;0.0.7&#092;&quot; -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1&nbsp; -I. -I. -I.&nbsp; &nbsp; -g -O2 -W -Wall -Werror -MT bsbfix.o -MD -MP -MF &quot;.deps/bsbfix.Tpo&quot; -c -o bsbfix.o bsbfix.c; &#092;<br />then mv -f &quot;.deps/bsbfix.Tpo&quot; &quot;.deps/bsbfix.Po&quot;; else rm -f &quot;.deps/bsbfix.Tpo&quot;; exit 1; fi<br />gcc&nbsp; -g -O2 -W -Wall -Werror&nbsp;  -o bsbfix&nbsp; bsbfix.o libbsb.a <br />Making all in tests<br />make[1]: Nothing to be done for `all&#39;.
    
  • UniXUniX Membre
    11:46 modifié #40
    Bon, j'ai réussi à  trouver un Mac PPC (merci papa ...), à  compiler la bibliothèque dessus, puis à  "l'assembler" avec la mienne i386 grâce à  Lipo.
    Donc c'est OK pour cette méthode.

    Il me reste à  solutionner comment me passer du Mac PPC pour la suite, car j'en aurais pas toujours un sous la main ...
  • schlumschlum Membre
    11:46 modifié #41
    S'il ne prend pas en compte CFLAGS, tu ne pourras pas faire grand chose à  part tripoter le configure à  la main...
  • UniXUniX Membre
    11:46 modifié #42
    Ben il doit le prendre en compte, puisque la technote d'Apple que je site plus haut indique cette méthode pour construire une bibliothèque UB basée sur un configure ....

    Mais, bon, pour l'instant, moi j'ai pas réussi .....
  • Philippe49Philippe49 Membre
    avril 2008 modifié #43
    Voilà  une procédure de création de librairie statique (d'après ADVANCED MAC OS PROGRAMMING de Hillegass et Dalrymple), qui marche sur MAC.





    [Fichier joint supprimé par l'administrateur]
Connectez-vous ou Inscrivez-vous pour répondre.