В чем разница между armv6 и i386? - PullRequest
3 голосов
/ 25 сентября 2010

Я пытаюсь связать libssh2.dylib (сторонняя библиотека, скомпилированная Мэтью Уилкинсоном с использованием библиотеки libssh2 из http://www.libssh2.org), в мой проект 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.

Ответы [ 2 ]

3 голосов
/ 25 сентября 2010

Это совершенно разные архитектуры процессоров. Если вы пытаетесь использовать предварительно скомпилированную библиотеку, предназначенную для одной, то вы не можете использовать ее для другой, вам нужно найти предварительно скомпилированную библиотеку, ориентированную на нужную платформу - armv6 для iPhone, i386 для Mac.

Поскольку вы пометили iPhone, возможно, у вас есть нужная библиотека, но настройки вашего проекта испорчены - убедитесь, что Base SDK установлен правильно (4.1 на момент написания). Как только это будет правильно, оно, вероятно, вообще не предоставит вам опцию цели i386 и по умолчанию выберет «armv6 armv7», как только вы выберете 4.1 SDK.

0 голосов
/ 25 сентября 2010

Похоже, библиотека создана для armv6 (для запуска на устройстве), и вы пытаетесь связать ее с приложением i386 (для запуска на симуляторе). Это явно не сработает.

...