Проблема с библиотекой C в XCode — файле была собрана для неподдерживаемого формата файла, который не связан с архитектурой

#iphone #objective-c #c #xcode

#iPhone #objective-c #c #xcode

Вопрос:

Итак, я пытаюсь использовать библиотеку C в Objective-C, проекте iPhone. Я получаю эту ошибку компоновщика при попытке скомпилировать:

файл был собран для неподдерживаемого формата файла, который не связан с архитектурой (i386)

Я собираю эту библиотеку, используя стандартный

./configure make

С какой архитектурой я должен это создать для работы с iPhone project? Спасибо! Обновить

Я обновил Makefile и добавил -arch i386 в строку CFLAGS. Когда я запускаю make, я теперь получаю эту ошибку:

Компиляция spammer.c gcc -o spammer spammer.o ../src/libirclient.a -lpthread ld: предупреждение: в ../src/libirclient.a файл был собран для неподдерживаемого формата файла, который не связан с архитектурой (x86_64)

Означает ли это, что мне нужно где-то отредактировать другой makefile??

Ответ №1:

Вероятно, он был создан для x86_64, который используется по умолчанию. Вам нужно изменить библиотеку, чтобы она была скомпилирована для i386 и соответствовала вашему приложению.

Обычно вы делаете это, устанавливая переменную среды CFLAGS в -arch i386 перед запуском configure. Не забудьте сначала выполнить «make dist clean». Если это не сработает, вы также можете вручную отредактировать Makefile после того, как configure создаст его, и добавить -arch i386 в строку CFLAGS= .

Комментарии:

1. Попробуйте это, как только я смогу. Спасибо за информацию!

2. Несмотря на ошибку, которую я получаю при сборке с этим набором CFLAG -arch i386, библиотека, похоже, связывает

Ответ №2:

Эта ошибка:

 Compiling spammer.c gcc -o spammer spammer.o ../src/libircclient.a -lpthread ld: warning: in ../src/libircclient.a, file was built for unsupported file format which is not the architecture being linked (x86_64)
  

Возникает при сборке примеров, и это не совсем то, что вы хотите, верно?

Сделайте make в папке SRC, и сборка с помощью -arch i386 или -arch arvm7 будет работать.