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. #21
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 962
    Par défaut
    Citation Envoyé par joachimzz Voir le message
    Je l'ai bien mis dans copy bundle ressources!!!
    il n'est pas censé trouver votre dylib dans .cache… et s'il y trouve quelque chose c'est que à un moment donné vous avez lié votre projet à cette dylib et installé tel quel sur l'iPhone… du coup il a copié cette dylib dans la cache de code et dlopen va continuer à la trouver sur son chemin…
    tant que vous ne lui donnez pas un autre nom ou tant que vous ne restaurez pas l'iPhone, vous allez avoir le problème…


    j'ai fait un essai ici avec l'exemple HelloWorld :
    et ce que j'obtiens c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dlopen(/var/mobile/Applications/FBBBF7CF-5C96-4921-8C8D-B32E4625CB60/HelloWorld.app/libTestDylib.dylib, 2): no suitable image found.  Did find:
    	/var/mobile/Applications/FBBBF7CF-5C96-4921-8C8D-B32E4625CB60/HelloWorld.app/libTestDylib.dylib: pread of fat file failed: 2
    	/var/mobile/Applications/FBBBF7CF-5C96-4921-8C8D-B32E4625CB60/HelloWorld.app/libTestDylib.dylib: stat() failed with errno=803194776
    il est à parier que la sandbox bloque les accès au fichier puisque l'erreur se produit sur le stat() lors de l'ouverture du fichier…
    (voir http://opensource.apple.com/source/d...3/src/dyld.cpp)

  2. #22
    Membre averti
    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
    Par défaut
    Ou est ce que vous voyez que j'ouvre la dylib dans le .cache?? Si c'est dans l'adresse qui est donné dans mes erreurs, c'est normal c'est moi qui le met là (c'est le système de fichier qui est crée par celix).

    J'ai refait un projet qui appelle juste dlopen avec un dylib bidon et ça me donne toujours la même erreur alors qu'elle est signée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dlopen(/var/mobile/Applications/B1F1E04F-0A84-4718-AD2A-98A94DD24C76/testLibrary2.app/libtestLibrary5.dylib, 2): no suitable image found.  Did find:
    	/var/mobile/Applications/B1F1E04F-0A84-4718-AD2A-98A94DD24C76/testLibrary2.app/libtestLibrary5.dylib: unknown file type, first eight bytes: 0x21 0x3C 0x61 0x72 0x63 0x68 0x3E 0x0A
    	/var/mobile/Applications/B1F1E04F-0A84-4718-AD2A-98A94DD24C76/testLibrary2.app/libtestLibrary5.dylib: stat() failed with errno=9
    Avec la commande hexdump sur la librairie j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0000000 ca fe ba be 00 00 00 02 00 00 00 0c 00 00 00 06
    0000010 00 00 00 30 00 00 09 90 00 00 00 02 00 00 00 0c
    0000020 00 00 00 09 00 00 09 c0 00 00 09 88 00 00 00 02
    0000030 21 3c 61 72 63 68 3e 0a 23 31 2f 32 30 20 20 20
    La j'arrive même pas à avoir la même chose que vous!!!

  3. #23
    Membre averti
    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
    Par défaut
    Je viens de remarquer un truc, lorsque je compile ma librarie sans mettre de certificat pour signer (je laisse code singning idendity vide), après la compilation lorsque je lance la commande hexdump ça me fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0000000 ca fe ba be 00 00 00 02 00 00 00 0c 00 00 00 06
    0000010 00 00 00 30 00 00 08 28 00 00 00 02 00 00 00 0c
    0000020 00 00 00 09 00 00 08 58 00 00 08 28 00 00 00 02
    0000030 21 3c 61 72 63 68 3e 0a 23 31 2f 32 30 20 20 20

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 962
    Par défaut
    Une solution :

    http://sumgroup.wikispaces.com/iPhone_Dynamic_Library

    Une autre :

    Pour créer la dylib, vous créer un nouveau projet basé sur le template Mac OS X:Framework & Library:Bundle

    Vous ajoutez vos sources,
    vous modifiez le Base SDK pour celui de l'iPhone et tout ce qui doit l'être pour l'iPhone…
    une fois le build réussi, dans le dossier build du projet du bundle, vous ouvrez le bundle lui-même et copiez le fichier qui contient le code…
    c'est lui la "bonne" dylib : vous n'avez plus qu'à l'ajouter à votre projet en lui donnant le bon nom et la bonne extension (optionnel)

    et…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    	NSString *dylibPath = [[NSBundle mainBundle] pathForResource:@"TestDylib3" ofType:@"dylib"] ;
    	void *hdl = dlopen([dylibPath UTF8String], RTLD_NOW) ;
    	
    	NSLog(@"path %@",dylibPath) ;
    	NSLog(@"hdl %X",hdl) ;
    	NSLog(@"error %s",dlerror()) ;
    	
    	if (hdl) {
    		int (*funcPtr)(char *s) = dlsym(hdl, "entrypoint") ;
    		
    		if (funcPtr)
    			NSLog(@"%d",(*funcPtr)("blabla")) ;
    		else
    			NSLog(@"error %s",dlerror()) ;
    		
    		dlclose(hdl) ;
    	}
    donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    [Session started at 2011-07-12 14:56:13 +0200.]
    GNU gdb 6.3.50-20050815 (Apple version gdb-1516) (Fri Feb 11 06:19:43 UTC 2011)
    Copyright 2004 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "--host=i386-apple-darwin --target=arm-apple-darwin".tty /dev/ttys008
    Loading program into debugger…
    Program loaded.
    target remote-mobile /tmp/.XcodeGDBRemote-59923-259
    Switching to remote-macosx protocol
    mem 0x1000 0x3fffffff cache
    mem 0x40000000 0xffffffff none
    mem 0x00000000 0x0fff none
    run
    Running…
    [Switching to thread 11779]
    [Switching to thread 11779]
    sharedlibrary apply-load-rules all
    continue
    warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.3 (8J2)/Symbols/System/Library/AccessibilityBundles/AccessibilitySettingsLoader.bundle/AccessibilitySettingsLoader (file not found).
    2011-07-12 14:56:18.318 HelloWorld[5021:707] path /var/mobile/Applications/FBBBF7CF-5C96-4921-8C8D-B32E4625CB60/HelloWorld.app/TestDylib3.dylib
    2011-07-12 14:56:18.326 HelloWorld[5021:707] hdl 140E40
    2011-07-12 14:56:18.329 HelloWorld[5021:707] error (null)
    2011-07-12 14:56:18.334 HelloWorld[5021:707] 123456
    kill
    quit
    (ma fonction test de la dylib étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int entrypoint(char *param) {
    	return 123456 ;
    }
    )

    notez aussi que rien ne devrait vous empêcher de mettre dans votre projet iPhone le bundle complet et utiliser les fonctions de NSBundle ou CFBundle pour charger le plug-in…

  5. #25
    Membre averti
    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
    Par défaut
    Oki merci. J'ai juste une question conne!!! comment ouvre-t'on un .bundle??

  6. #26
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 962
    Par défaut
    Citation Envoyé par joachimzz Voir le message
    Oki merci. J'ai juste une question conne!!! comment ouvre-t'on un .bundle??
    clic droit dans le Finder : "Afficher le contenu du paquet"…

    mais encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	CFBundleRef mainBundle = CFBundleGetMainBundle() ;
    	CFURLRef bundleURL = CFBundleCopyResourceURL ( mainBundle, CFSTR("TestDylib3"), CFSTR("bundle"), NULL) ;
    	CFBundleRef pluginBndlRef = CFBundleCreate(kCFAllocatorDefault, bundleURL) ;
    	if (pluginBndlRef) {
    		int (*funcPtr)(char *s) =  CFBundleGetFunctionPointerForName(pluginBndlRef, CFSTR("entrypoint")) ;
    		if (funcPtr)
    			NSLog(@"%d",(*funcPtr)("blabla")) ;
    		else
    			NSLog(@"entrypoint not found") ;
    	}
    dans votre projet principal vous incluez le(s) projet(s) qui construi(sen)t le(s) bundle(s),
    (vous ouvrez les 2 projets et vous ajoutez celui du bundle à celui de l'application par drag and drop de son icone bleue dans la la liste Groups and Files)

    vous ouvrez le projet du bundle ainsi inclus en cliquant sur son triangle dans la outline view et vous ajoutez le .bundle dans la Copy Bundle Resource phase

    le gros avantage étant qu'en faisant ainsi, Xcode va automatiquement copier dans le produit final la bonne version du bundle et vous pourrez tester aussi bien sur le Simulateur que sur l'iPhone sans aucun souci
    ce qui n'est pas du tout le cas en extrayant à la main les dylibs… : soit vous aurez celle du simulateur soit celle de l'iPhone mais jamais la bonne automatiquement.

  7. #27
    Membre averti
    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
    Par défaut
    Pour la question conne!!!!! c'était bon en fait (je suis vraiment fatigué)

    Sinon c'est bon pour la dylib ça marche nikel.

    Je vous remercie vraiment. Je pense que j'aurais vraiment galéré tout seul pour trouver et surtout merci pour les explications j'en avais besoin!!!!

    Demain je testerai votre dernier code.

    Je reviendrai sûrement très vite lol.

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