Параметры компоновщика «Связать все сборки» и «Связать только сборки SDK» вызывают неопределенные символы в статической библиотеке стороннего производителя - PullRequest
4 голосов
/ 10 мая 2011

Может кто-нибудь объяснить, пожалуйста, что здесь происходит. Если я выберу Связать все сборки или Связать только сборки SDK для поведения компоновщика в параметрах сборки проекта, то я получу следующие ошибки связывания, возникающие в моей статической библиотека, libUltralite.a.

Undefined symbols:
"_SecRandomCopyBytes", referenced from:
  _zcbdb539311e3 in libUltralite.a(03b1278799.o)  
"_SecTrustSetAnchorCertificates", referenced from:
  zda160c9852f6::z41eb5883fa2f(__CFArray const*)  in libUltralite.a(fb6da25cb9.o)
"_SecKeyGetBlockSize", referenced from:
  _zd0743c47573a in libUltralite.a(f43c4e48ce.o)
"_SecCertificateCopySubjectSummary", referenced from:
  zda160c9852f6::z41eb5883fa2f(__CFArray const*)  in libUltralite.a(fb6da25cb9.o)
"_SecPolicyCreateSSL", referenced from:
  zda160c9852f6::z41eb5883fa2f(__CFArray const*)  in libUltralite.a(fb6da25cb9.o)
"_SecTrustCopyPublicKey", referenced from:
  _z2cfcc7397b7e in libUltralite.a(f43c4e48ce.o)
"_SecTrustCreateWithCertificates", referenced from:
  zda160c9852f6::z41eb5883fa2f(__CFArray const*)  in libUltralite.a(fb6da25cb9.o)
  _z2cfcc7397b7e in libUltralite.a(f43c4e48ce.o)
"_SecCertificateCreateWithData", referenced from:
  zda160c9852f6::z635831b310af(unsigned char*, unsigned long)in libUltralite.a(fb6da25cb9.o)
  _z2cfcc7397b7e in libUltralite.a(f43c4e48ce.o)
"_kSecRandomDefault", referenced from:
  _kSecRandomDefault$non_lazy_ptr in libUltralite.a(03b1278799.o)
 (maybe you meant: _kSecRandomDefault$non_lazy_ptr)
"_SecKeyEncrypt", referenced from:
  _zb27eee72717c in libUltralite.a(f43c4e48ce.o)
"_SecPolicyCreateBasicX509", referenced from:
  _z2cfcc7397b7e in libUltralite.a(f43c4e48ce.o)
"_SecTrustEvaluate", referenced from:
  zda160c9852f6::z41eb5883fa2f(__CFArray const*)  in libUltralite.a(fb6da25cb9.o)
  _z2cfcc7397b7e in libUltralite.a(f43c4e48ce.o)

Если я вместо этого выбрал Не связывать для поведения Линкер , тогда связывание работает и не выдает никаких ошибок, но приложение аварийно завершает работу при запуске на реальном iphone. Приложение не падает на симуляторе, а только на реальном iphone. (Да, я перекомпилировал свою статическую библиотеку для фактического устройства ... поэтому включаемая библиотека предназначена для правильной платформы).

Мои дополнительные аргументы mtouch в рамках проекта build Опции следующие:

-v -v -v -gcc_flags "-lstdc++ -I${ProjectDir}/Ultralite/Include -L${ProjectDir}/Ultralite -lUltralite -force_load ${ProjectDir}/Ultralite/libUltralite.a"

На простом примере я пришел к выводу, что MonoTouch правильно работает на симуляторе и на реальном устройстве с Поведение компоновщика , установленным на Только для Link SDK сборок , но мне нужно найти почему ссылки на мою статическую библиотеку не работают правильно с этим параметром? Если бы кто-то мог пролить некоторый свет на возникающие ошибки связывания или предложить обходной путь для правильного связывания моего приложения с этим набором параметров поведение компоновщика , я был бы очень признателен.

Ответы [ 3 ]

3 голосов
/ 10 мая 2011

Я думаю, что ваш libUltralite.a на самом деле ссылается на какую-то другую библиотеку, которую вы не связываете с проектом, т.е. libUltralite.a имеет зависимость.Проверьте, где реализуется _SecRandomCopyBytes (ищите на диске заголовок или что-то в этом роде), чтобы узнать фактическую «lib» .a, которую нужно добавить в компоновщик.

2 голосов
/ 06 апреля 2012

Я столкнулся с аналогичной проблемой с RestKit - но вы можете просто добавить Security.framework в ваш проект / цель. (вам не нужно добавлять флаг вручную) - ну, если вы используете XCode. Если вы используете компиляцию командной строки, да, вам нужна -framework Security.

0 голосов
/ 11 мая 2011

Может быть, вы должны скомпилировать третье лицо с той же версией monotouch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...