2010-09-24 6 views
3

Je suis en train de créer un lien libssh2.dylib (une bibliothèque 3ème partie compilé par Matthew Wilkinson à l'aide libssh2 bibliothèque de http://www.libssh2.org) à mon projet Xcode, mais lorsque je tente le code suivant:Quelle est la différence entre armv6 et i386?

const char * libssh2_version(int required_version); 
printf("libssh2 version: %s", libssh2_version(0)); 

Heres l'erreur que je reçois:

ld: warning: in /iaN's Work/Developer/Apple/iPhone/apps/PortScanner/libssh2.1.dylib, file was built for armv6 which is not the architecture being linked (i386) 
Undefined symbols: 
"_libssh2_version", referenced from: 
-[Request connect] in Request.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Je reçois cette erreur lorsque j'essaye une API libssh2. Quelqu'un at-il la moindre idée de quel est le problème? Ce sont les fichiers que j'ai liés au projet:

// SSH Librarys 
#include "libssh2_config.h" 
#include "libssh2.h" 
#include "libssh2_sftp.h" 

#ifdef HAVE_WINDOWS_H 
#include <windows.h> 
#endif 
#ifdef HAVE_WINSOCK2_H 
#include <winsock2.h> 
#endif 

#ifdef HAVE_SYS_SOCKET_H 
#include <sys/socket.h> 
#endif 
#ifdef HAVE_NETINET_IN_H 
#include <netinet/in.h> 
#endif 
# ifdef HAVE_UNISTD_H 
#include <unistd.h> 
#endif 

#include <sys/types.h> 
#include <fcntl.h> 
#include <errno.h> 
#include <stdio.h> 
#include <ctype.h> 

J'ai également lié le fichier libssh2.dylib aux cadres et a ajouté un chemin récursif « Recherche en-tête des fichiers » sur l'onglet Construire pour les fichiers libssh2. a, libgcrypt.a, libgpg-error.a.

+0

Je ne sais rien sur les dev de l'iPhone, mais ARMv6 est l'architecture du processeur à l'intérieur de l'iPhone et i386 est l'architecture de la machine de bureau OS X. Donc, il semble que vous utilisiez une bibliothèque pour iPhone, mais XCode pense que vous voulez compiler une application de bureau. Vérifiez les paramètres de votre projet. – bobince

Répondre

3

Ce sont des architectures CPU complètement différentes. Si vous essayez d'utiliser une bibliothèque précompilée ciblée sur un, alors vous ne pouvez pas l'utiliser sur l'autre, vous devez trouver une bibliothèque précompilée ciblée sur la plate-forme que vous voulez - armv6 pour iPhone, i386 pour Mac.

Depuis que vous avez étiqueté l'iPhone, vous avez peut-être la bonne bibliothèque mais les paramètres de votre projet sont vissés - assurez-vous que Base SDK est réglé correctement (4.1 au moment de l'écriture). Une fois que cela est correct, il ne vous présentera probablement pas du tout avec l'option de cible i386 et sera par défaut "armv6 armv7" dès que vous aurez sélectionné 4.1 SDK.

+0

J'essaie de l'exécuter sur le simulateur iPhone à l'époque. Je suppose que ça ne fonctionnera pas sur le simulateur alors peut-être que je devrais essayer sur l'appareil hein? – iiyanx7

+1

Non, vous construisez pour le simulateur comme s'il s'agissait d'un vrai périphérique - arm, pas i386. –

0

On dirait que la bibliothèque est construite pour armv6 (pour fonctionner sur l'appareil) et que vous essayez de le lier dans une application i386 (pour fonctionner sur le simulateur). Cela ne va évidemment pas fonctionner.

Questions connexes