2010-09-24 56 views
3

我想(马修·威尔金森使用libssh2库从http://www.libssh2.org编译第三方库)链接libssh2.dylib到我的Xcode项目,但是当我尝试下面的代码:armv6和i386有什么区别?

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 

当我尝试任何libssh2 API我得到这个错误。任何人都有什么线索是什么问题?这是我所链接到项目中的文件:

// 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> 

我也挂了libssh2.dylib文件的框架,并增加了一个递归路径上生成选项卡中的“搜索头文件”的文件libssh2。 a,libgcrypt.a,libgpg-error.a。

+0

我对iPhone dev一无所知,但ARMv6是iPhone内部CPU的体系结构,i386是OS X桌面机的体系结构。所以这听起来像你正在使用iPhone库,但XCode认为你想编译一个桌面应用程序。检查你的项目设置。 – bobince 2010-09-24 22:57:15

回答

3

它们是完全不同的CPU架构。如果你正在尝试使用一个预编译的库,那么你不能在另一个库上使用它,你需要找到一个针对你所需平台的预编译库 - 用于iPhone的armv6,用于Mac的i386。

既然你标记了iPhone,你可能有正确的库,但你的项目设置搞砸了 - 确保Base SDK设置正确(在写作时为4.1)。一旦这是正确的,它可能根本不会给你提供i386目标选项,并且只要选择4.1 SDK,就会默认为“armv6 armv7”。

+0

我正试图在iPhone模拟器上运行它。我想它不会在模拟器上工作,所以也许我应该尝试在设备上吧? – iiyanx7 2010-09-25 02:21:00

+1

不,你建立模拟器,仿佛它是一个真正的设备 - 手臂,而不是i386。 – 2010-09-26 11:04:10

0

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