Iphone armv6和i386之间有什么区别?

Iphone armv6和i386之间有什么区别?,iphone,arm,cpu-architecture,i386,libssh,Iphone,Arm,Cpu Architecture,I386,Libssh,我正在尝试将libssh2.dylib(Matthew Wilkinson使用libssh2 library from编译的第三方库)链接到我的xcode项目,但当我尝试以下代码时: const char * libssh2_version(int required_version); printf("libssh2 version: %s", libssh2_version(0)); 下面是我得到的错误: ld: warning: in /iaN's Work/Developer/Apple

我正在尝试将libssh2.dylib(Matthew Wilkinson使用libssh2 library from编译的第三方库)链接到我的xcode项目,但当我尝试以下代码时:

const char * libssh2_version(int required_version);
printf("libssh2 version: %s", libssh2_version(0));
下面是我得到的错误:

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
我在尝试任何libssh2api时都会遇到此错误。有人知道问题出在哪里吗?以下是我链接到项目的文件:

// 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>
//SSH库
#包括“libssh2_config.h”
#包括“libssh2.h”
#包括“libssh2_sftp.h”
#如果有窗口
#包括
#恩迪夫
#如果DEF拥有WINSOCK2
#包括
#恩迪夫
#如果DEF有系统插座
#包括
#恩迪夫
#如果你有网络
#包括
#恩迪夫
#如果有
#包括
#恩迪夫
#包括
#包括
#包括
#包括
#包括

我还将libssh2.dylib文件链接到框架,并在Build选项卡上为libssh2.a、libgcrypt.a、libgpg error.a文件添加了“搜索头文件”的递归路径。它们是完全不同的CPU体系结构。如果您试图使用针对其中一个平台的预编译库,那么您无法在另一个平台上使用它,您需要找到针对您想要的平台的预编译库—适用于iPhone的armv6,适用于Mac的i386


因为您标记了iPhone,所以您可能有正确的库,但项目设置有问题-请确保基本SDK设置正确(撰写本文时为4.1)。一旦这是正确的,它可能根本不会向您提供i386目标选项,并且在您选择4.1 SDK时,它将默认为“armv6 armv7”。

它看起来像是为armv6构建的库(用于在设备上运行),而您正试图将其链接到i386应用程序(用于在模拟器上运行)。这显然行不通。

我对iPhone开发一无所知,但ARMv6是iPhone内部CPU的体系结构,i386是OS X台式机的体系结构。所以听起来像是在使用iPhone库,但XCode认为您需要编译一个桌面应用程序。检查你的项目设置。我当时正试图在iPhone模拟器上运行它。我猜它在模拟器上不起作用,所以也许我应该在设备上试试,嗯?不,你为模拟器构建的是一个真正的设备手臂,而不是i386。