IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement iOS Discussion :

dynamic library pour iOS


Sujet :

Développement iOS

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut dynamic library pour iOS
    Bonjour tout le monde,

    Est ce que vous savez comment créer un .dylib pour iOS?

    En fait, je veux créer un .dylib et ensuite lorsqu'il est sur le téléphone le lire avec la méthode dlopen (page d'utilisation de dlopen).

    Aujourd'hui, j'ai cet erreur quand j'utilise dlopen():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dlopen(/var/mobile/Applications/9E88F563-7998-4211-B60D-FDF9000446B7/Documents/.cache/bundle1/version0.0/libhello_world.dylib, 2): no suitable image found.  Did find:
    	/var/mobile/Applications/9E88F563-7998-4211-B60D-FDF9000446B7/Documents/.cache/bundle1/version0.0/libhello_world.dylib: mach-o, but wrong architecture
    	/var/mobile/Applications/9E88F563-7998-4211-B60D-FDF9000446B7/Documents/.cache/bundle1/version0.0/libhello_world.dylib: stat() failed with errno=903201927
    Je pense que c'est du au fait que la dylib n'est pas compiler pour iOS mais pour Mac (c'est même sûr). Donc voilà il faudrait juste que je sache si il est possible de compiler une dylib pour iOS et comment faire.

    Merci d'avance, bonne soirée.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    RTFM :

    "The iOS SDK supports the creation of native applications that appear on the device’s Home screen only. It does not support the creation of other types of code, such as drivers, frameworks, or dynamic libraries. If you want to integrate code from a framework or dynamic library into your application, you should link that code statically into your application’s executable file when building your project."
    En clair :

    S'il est techniquement possible de faire une dylib pour iOS (puisque les frameworks de l'OS ne sont rien d'autre que cela…), vous devez faire une librairie statique : même si vous arriviez à contourner le problème sur votre device personnel, votre application sera rejetée par le système d'approbation si elle charge dynamiquement du code autre que les frameworks de iOS.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Merci pour cette réponse!!!

    En fait je crois que vous avez mal compris ce que je veux faire (jai du mal expliqué)!!! Je veux juste créer un .dylib, puis le compiler pour iOS. C'est la deuxième phase qui pose problème, je ne sais pas comment configurer XCode pour le faire. Normalement ça doit être possible car les bibliothèques qu'on utilise dans nos codes sont des des dylib mais je ne sais pas comment (je ne suis pas un expert d'XCode).

    La raison pour laquelle je veux le faire n'est pas du tout commerciale, c'est juste des tests. Plus exactement, on essaie de voir si il est possible d'importer Celix sur iOS. Le but est de simplement trouver les limites de cette importation.

    Enfin pour répondre à ce qui est dit sur le "manuel", nos dylib ne doivent pas être liés au projet. Il faut les utiliser comme un simple fichier qu'on traiterait avec dlopen().

    Merci d'avance pour vos futures réponses!!!

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Dans XCode, choisir comme template iOS:Library:Cocoa Touch Static Library
    Une fois le projet créé, aller dans les settings du projet, partie Linking et changer le Mach-O type en "Dynamic Library",
    dans les settings de la Target : changer l'extension du produit de "a" en "dylib"

    Il compilera mais il peut faire une erreur sur la liaison du fichier des symboles pour le debugging.
    Pour que dlopen fonctionne sur l'iPhone, il est impératif que la dylib soit aussi signée avec un certificat.
    Pour mettre la dylib sur le device, il faudra la mettre dans les ressources (comme si c'était une image) de l'application hôte.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Oki merci bien. Je testerai ça demain au travail.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Bonjour, voilà j'ai fait ce que vous avez dit mais j'ai du louper une étape!!!!

    Voilà ce que j'ai à l'exécution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dlopen(/var/mobile/Applications/9E88F563-7998-4211-B60D-FDF9000446B7/Documents/.cache/bundle1/version0.0/libhelloWorld3.dylib, 2): no suitable image found.  Did find:
    	/var/mobile/Applications/9E88F563-7998-4211-B60D-FDF9000446B7/Documents/.cache/bundle1/version0.0/libhelloWorld3.dylib: unknown file type, first eight bytes: 0x21 0x3C 0x61 0x72 0x63 0x68 0x3E 0x0A
    	/var/mobile/Applications/9E88F563-7998-4211-B60D-FDF9000446B7/Documents/.cache/bundle1/version0.0/libhelloWorld3.dylib: stat() failed with errno=1395344
    J'ai réussi à créer la dylib, la mettre sur le téléphone mais il n'arrive pas à l'ouvrir!!! Normalement pour la compilation de la dylib j'ai bien mis les bons paramètres (version d'iOS, mon certificat ...).

    Est ce que vous avez une idée??

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Avez-vous bien mis la version "Release" de la dylib : celle pour l'iPhone et non celle pour le simulateur ?
    (vous devriez avoir une librairie FAT arm6/arm7…)

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Oui j'ai bien utilisé la version release pour le device et non l'emulateur

    dans Architectures j'ai :

    Architectures : Standard (armv6 armv7)
    Base SDK : Latest (iOS 4.3)
    Valid Architectures : armv6 armv7

    dans Linking:

    Match-O Type : Dynamic Library

    Et j'ai bien mis mon certificat pour signer la librairie

    Après je ne vois pas trop ce qu'il y aurait d'autre à modifier.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Pour la compilation:

    Je compile avec les options suivantes : device, release, armv6

    Et dans le message précédent j'ai oublié de dire que je choisissais dans les infos du projet pour iOS Deployment Target: iOS 4.2. C'est la version de mon iPhone

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par joachimzz Voir le message
    Oui j'ai bien utilisé la version release pour le device et non l'emulateur
    entre ce que vous dites et ce que vous faites…

    les bytes
    213C617263683E0A
    c'est en ASCII
    !<arch>
    une librairie signée pour arm6/arm7 çà commence par les bytes
    CAFEBABE (en hexa…)
    le !<arch> apparaît plus loin … à l'offset 48…

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Oki merci pour l'explication. J'avoue que j'avais beaucoup de mal à comprendre ce que ça voulait dire ces bits. Je vais essayer de voir ce qui ne va pas

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    J'essaie de voir mais je ne vois pas du tout ce qui ne va pas.

    Est ce que vous pouvez m'expliquer ce que veut dire !<arch> dans votre précédent message svp??

    Pour signer la librarie il faut bien que j'utilise mon compte développeur iPhone??

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par joachimzz Voir le message
    J'essaie de voir mais je ne vois pas du tout ce qui ne va pas.

    Est ce que vous pouvez m'expliquer ce que veut dire !<arch> dans votre précédent message svp??

    Pour signer la librarie il faut bien que j'utilise mon compte développeur iPhone??
    !<arch> c'est la valeur en ASCII des bytes 0x21 0x3C 0x61 0x72 0x63 0x68 0x3E
    qui apparaissent dans le message d'erreur se plaignant du format du fichier …
    une librairie Arm signée commence par les bytes 0xCA 0xFE 0xBA 0xBE

    donc le message d'erreur est normal : vous ne transférez pas sur l'iPhone le bon fichier dylib.

    Pour signer un exécutable pour la phase de tests sur votre propre iPhone vous utilisez le certificat lié à votre "provisioning profile" mais ni le certificat "Adhoc" ni le certificat de distribution.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Oki merci pour la réponse.

    Pour la signer il suffit de sélectionner son compte developer dans Code Signing -> Code Signing Idendity???

    Le fichier .dylib à mettre dans mon projet se trouve bien dans Release-iphoneos???

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par joachimzz Voir le message
    Oki merci pour la réponse.

    Pour la signer il suffit de sélectionner son compte developer dans Code Signing -> Code Signing Idendity???
    oui mais le "bon" profil : pas celui qui sert à publier sur l'AppStore, celui de "provisioning", si vous n'avez pas oublié de le créer dans votre compte iTunes : sinon il faut y retourner pour créer une profil de "provisioning" qui ne sert qu'à signer les applications que l'on teste sur ses propres machines…


    Le fichier .dylib à mettre dans mon projet se trouve bien dans Release-iphoneos???
    oui
    et vérifiez avec hexdump qu'il commence bien par CAFEBABE…

  16. #16
    Expert éminent

    Avatar de Marcos Ickx
    Homme Profil pro
    Blogueur
    Inscrit en
    Mai 2007
    Messages
    1 557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Blogueur

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 557
    Points : 6 733
    Points
    6 733
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par joachimzz Voir le message
    Oui j'ai bien utilisé la version release pour le device et non l'emulateur

    dans Architectures j'ai :

    Architectures : Standard (armv6 armv7)
    Base SDK : Latest (iOS 4.3)
    Valid Architectures : armv6 armv7

    dans Linking:

    Match-O Type : Dynamic Library

    Et j'ai bien mis mon certificat pour signer la librairie

    Après je ne vois pas trop ce qu'il y aurait d'autre à modifier.
    Citation Envoyé par joachimzz Voir le message
    Pour la compilation:

    Je compile avec les options suivantes : device, release, armv6

    Et dans le message précédent j'ai oublié de dire que je choisissais dans les infos du projet pour iOS Deployment Target: iOS 4.2. C'est la version de mon iPhone
    Est ce logique d'indiquer dans XCode que le SDK utilisé pour votre application soit iOS 4.3, pour déployer ensuite sur un iPhone équipé uniquement de iOS 4.2 ?
    Marcos Ickx

    Liens intéressants :
    Mon blog,
    Mon compte Twitter

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Moi non plus je trouve pas ça logique!!! mais je n'ai jamais eu de problème.

    @ JeitEmgie merci je vais essayer de voir ce qui me manque!! Merci aussi pour le nom du logiciel

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Re bonjour!!!

    Voilà, j'ai fait un nouveau projet pour recréer ma dylib. Avec la commande hexdump je vérifie que le fichier est bon. Normalement il l'est, j'ai cette ligne :

    0000000 ca fe ba be 00 00 00 02 00 00 00 0c 00 00 00 06

    Le problème maintenant, lorsque j'essaie de l'ouvrir sur l'iPhone, il me donne la même erreur que précédemment:

    dlopen(/var/mobile/Applications/388AA889-7359-43B5-86AB-55BA960F2DC2/Documents/.cache/bundle1/version0.0/libHelloWorld5.dylib, 2): no suitable image found. Did find:
    /var/mobile/Applications/388AA889-7359-43B5-86AB-55BA960F2DC2/Documents/.cache/bundle1/version0.0/libHelloWorld5.dylib: unknown file type, first eight bytes: 0x21 0x3C 0x61 0x72 0x63 0x68 0x3E 0x0A
    /var/mobile/Applications/388AA889-7359-43B5-86AB-55BA960F2DC2/Documents/.cache/bundle1/version0.0/libHelloWorld5.dylib: stat() failed with errno=-1

    En fait on dirait que la dylib finale contient deux dylib, une pour armv6 et l'autre pour armv7.
    Quand je vais dans les dossiers générés: nomProjet.build/Release-iphoneos/NomProjet.build/Objects-normal/ il y a deux dossiers armv6 et armv7.
    Dans chacun des dossiers, il y a ma librairie générée et quand je leur applique la commande hexdump il me donne la ligne:

    0000000 21 3c 61 72 63 68 3e 0a 23 31 2f 32 30 20 20 20

    Donc en fait quand dlopen se lance, je pense qu'il arrive pas à ouvrir la dylib qui est contenue dans ma dylib finale!!!

  19. #19
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par joachimzz Voir le message
    Donc en fait quand dlopen se lance, je pense qu'il arrive pas à ouvrir la dylib qui est contenue dans ma dylib finale!!!
    pas du tout : il n'a rien à faire à chercher votre dylib dans un .cache !
    ce qui signifie sans doute que quand vous avez ajouté la dylib à votre projet, il a détecté que c'était du code et l'ajoutée aux options de link
    ce qui évidemment il ne faut pas faire : vérifiez que dans le Link Binary With Libraries de la Target la dylib n'est PAS dans la liste des fichiers
    mais que par contre elle est bien dans Copy Bundle Resources : il suffit de la dragger de l'un dans l'autre…

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2011
    Messages : 30
    Points : 8
    Points
    8
    Par défaut
    Je l'ai bien mis dans copy bundle ressources!!!

Discussions similaires

  1. Unable to load dynamic library php_oci8.dll
    Par rochenico dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 08/01/2008, 11h26
  2. IIS - "unable to load dynamic library"
    Par nicojet dans le forum IIS
    Réponses: 1
    Dernier message: 27/06/2007, 09h44
  3. [visual studio 6] De Static Library à Dynamic Library
    Par mambo dans le forum Visual C++
    Réponses: 2
    Dernier message: 30/05/2007, 15h33
  4. Création d'une librarie pour le protocole news (NNTP) ??
    Par websurfeur dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 09/05/2006, 18h28
  5. php_ifx.dll : unable to load dynamic library
    Par fh dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 08/12/2005, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo