3

我正在尝试将 libssh2.dylib(由 Matthew Wilkinson 使用来自http://www.libssh2.org的 libssh2 库编译的第 3 方库)链接到我的 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

当我尝试任何 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。

4

2 回答 2

3

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

由于您标记了 iPhone,您可能拥有正确的库,但您的项目设置搞砸了 - 确保 Base SDK 设置正确(撰写本文时为 4.1)。一旦这是正确的,它可能根本不会为您提供 i386 目标选项,并且在您选择 4.1 SDK 时将默认为“armv6 armv7”。

于 2010-09-24T22:59:02.637 回答
0

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

于 2010-09-24T23:08:00.710 回答