Ошибка компоновщика - проект не очищается полностью? - PullRequest
0 голосов
/ 16 сентября 2011

Я собираюсь заранее извиниться здесь. Проект, над которым я работаю, подпадает под действие пары NDA, поэтому я не смогу быть настолько конкретным, как обычно хотел бы.

Я работаю над проектом iOS, который включает в себя предварительно скомпилированную библиотеку в форме файла .h и .a. Я начал разработку с определенной версии этой библиотеки, и все работало нормально. С тех пор они выпустили новую версию, которая мне нужна для конкретной новой функции.

Между старой и новой версиями изменились некоторые имена функций. Когда я обновляю свой код для вызова новых методов, я получаю Apple Mach-O Linker Error во время компиляции: (имена были изменены, чтобы защитить невинных)

Undefined symbols for architecture armv7:
  "methodName", referenced from:
    myMethod()      in MyClass.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status

Я знаю, что похоже, что он не включает код armv7, но на самом деле это красная сельдь. Если я установлю параметр сборки архитектуры для проекта и цели на Standard (armv6 armv7), я получу ту же ошибку компоновщика, за исключением того, что она скажет armv6.

Проблема в том, что я могу поместить новые файлы .h и .a в новый проект, вызвать тот же метод и не получить ошибку компоновщика!

У меня такое ощущение, что что-то не очищается, и он пытается скомпилировать старый файл .a. Я использую Xcode 4.1 на Snow Leopard. Я попытался удалить файл из проекта, удалить файл .a из раздела Link Binary With Libraries в разделе Build Phases для цели, очистить, добавить обратно файл .a и перестроить, и я все еще получаю сообщение об ошибке. начинает сходить с ума здесь.

1 Ответ

1 голос
/ 16 сентября 2011

ОК - я нашел виновника! Естественно, это было в настройках сборки.

Когда я переключился на новую версию, я поместил новую библиотеку в папку рядом со старой, на случай, если мне придется переключиться обратно в какой-то момент. Видимо, когда я удалил старую версию, она не удаляла путь к старой версии .a файла из Library Search Paths в настройках сборки для цели. Удалил старый путь, все снова работает.

...