Skip to content
This repository has been archived by the owner on Sep 19, 2023. It is now read-only.

Undefined symbols for architecture i386 и проблемы с armv7s #29

Closed
abonec opened this issue Jan 13, 2016 · 4 comments
Closed

Comments

@abonec
Copy link

abonec commented Jan 13, 2016

Есть phonegap проект, добавил в него метрику с помощью плагина https://github.com/abonec/AppMetricaCordovaPlugin (в этом форке обновил sdk для ios до последней на данный момент версии).
После добавления перестала собираться через коммандную строку (при этом через xcode собирается нормально и для апстора тоже, в метрике заходы отображаются).
Сборка дефолная через phonegap build ios
https://gist.github.com/abonec/54d5fecf793540028dfe
Сборка для девайса через phonegap build ios --device
https://gist.github.com/abonec/eb01b4284c3830a54b30

@elfenlaid
Copy link
Contributor

Судя по ошибкам сборки:

  • для phonegap build ios, статические библиотеки CordovaPlugin не поддерживают архитектуры i386 и x86_64. Т.е. в настоящем виде они не могут быть использованы для работы с iOS Simulator.
  • для phonegap build ios --device архитектура armv7s не поддерживается АппМетрикой начиная с версии 2.0.0.

@abonec
Copy link
Author

abonec commented Jan 13, 2016

Там же в логе в конце написано:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_FMDatabase", referenced from:
      _OBJC_CLASS_$_YMMDatabase in libYandexMobileMetrica.a(YMMDatabase.o)
  "_OBJC_CLASS_$_FMDatabaseQueue", referenced from:
      _OBJC_CLASS_$_YMMDatabaseQueue in libYandexMobileMetrica.a(YMMDatabaseQueue.o)
  "_OBJC_CLASS_$_FMResultSet", referenced from:
      l_OBJC_$_CATEGORY_FMResultSet_$_YMMAdditions in libYandexMobileMetrica.a(FMResultSet+YMMAdditions.o)
  "_OBJC_CLASS_$_KSCrash", referenced from:
      objc-class-ref in libYandexMobileMetrica.a(YMMCrashLoader.o)
  "_OBJC_CLASS_$_KSCrashReportFilterAppleFmt", referenced from:
      objc-class-ref in libYandexMobileMetrica.a(YMMCrashReportFilterAppleFmt.o)
  "_OBJC_CLASS_$_KSSystemInfo", referenced from:
      objc-class-ref in libYandexMobileMetrica.a(YMMCrashReportFilterAppleFmt.o)
  "_OBJC_CLASS_$_RFC3339DateTool", referenced from:
      objc-class-ref in libYandexMobileMetrica.a(YMMCrashReportDecoder.o)
  "_OBJC_METACLASS_$_FMDatabase", referenced from:
      _OBJC_METACLASS_$_YMMDatabase in libYandexMobileMetrica.a(YMMDatabase.o)
  "_OBJC_METACLASS_$_FMDatabaseQueue", referenced from:
      _OBJC_METACLASS_$_YMMDatabaseQueue in libYandexMobileMetrica.a(YMMDatabaseQueue.o)
  "_protobuf_c_message_free_unpacked", referenced from:
      _ymm__ymmpbtime__free_unpacked in libYandexMobileMetrica.a(Metrica.pb-c.o)
      _ymm__ymmpbreport_message__free_unpacked in libYandexMobileMetrica.a(Metrica.pb-c.o)
  "_protobuf_c_message_get_packed_size", referenced from:
      _ymm__ymmpbtime__get_packed_size in libYandexMobileMetrica.a(Metrica.pb-c.o)
      _ymm__ymmpbreport_message__get_packed_size in libYandexMobileMetrica.a(Metrica.pb-c.o)
  "_protobuf_c_message_pack", referenced from:
      _ymm__ymmpbtime__pack in libYandexMobileMetrica.a(Metrica.pb-c.o)
      _ymm__ymmpbreport_message__pack in libYandexMobileMetrica.a(Metrica.pb-c.o)
  "_protobuf_c_message_pack_to_buffer", referenced from:
      _ymm__ymmpbtime__pack_to_buffer in libYandexMobileMetrica.a(Metrica.pb-c.o)
      _ymm__ymmpbreport_message__pack_to_buffer in libYandexMobileMetrica.a(Metrica.pb-c.o)
  "_protobuf_c_message_unpack", referenced from:
      _ymm__ymmpbtime__unpack in libYandexMobileMetrica.a(Metrica.pb-c.o)
      _ymm__ymmpbreport_message__unpack in libYandexMobileMetrica.a(Metrica.pb-c.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

А что не так с armv7s? Почему перестали поддерживать? Я просто в этом мало понимаю.

@elfenlaid
Copy link
Contributor

То, что архитектуры, необходимые для работы с симулятором (i386 и x86_64) отсутствуют в статических библиотеках репозитория CordovaPlugin, можно убедиться загрузузив любую из статических библиотек, например эту, и используя комманду file ознакомится со списком поддерживаемых архитектур.
Лог вышеописанной процедуры:

$ file libFMDB.a
libFMDB.a: Mach-O universal binary with 3 architectures
libFMDB.a (for architecture armv7): current ar archive random library
libFMDB.a (for architecture arm64): current ar archive random library
libFMDB.a (for architecture armv7s):    current ar archive random library

Из лога видно, что архитектуры i386 и x86_64 отсутствуют.

@elfenlaid
Copy link
Contributor

А что не так с armv7s? Почему перестали поддерживать? Я просто в этом мало понимаю.

С выходом arm64, armv7s потеряла свою актуальность. Устройства, которые поддерживают armv7s, так же обратно совместимы с armv7.
Поддержка armv7s особых плюсов не даёт, а места в бинарниках и библиотеках занимает. Собственно, список архитектур устройств по умолчанию начиная с Xcode 6 включает в себя две: armv7 и arm64

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants