2013-12-21 2 views
2

Я могу успешно создать файл dll для статической библиотеки Objective-C. Но когда я пытаюсь ссылаться на этот DLL из Xamarin.iOS приложения и компиляции, он дает мне много ошибок, как ...Связывание iOS Static Library с Xamarin.iOS и использование dll

MT5210 Ошибки: Native сшивание не удалось, неопределенный символ: _AudioFileClose. Убедитесь, что ссылки на все необходимые фреймворки указаны правильно, а родные библиотеки правильно связаны. (MT5210)

Ошибка MT5210: Неверная ссылка не удалась, неопределенный символ: std :: ios_base :: Init :: Init(). Убедитесь, что ссылки на все необходимые фреймворки указаны, а родные библиотеки правильно связаны. (MT5210)

Ошибка MT5202: Исходная ссылка не удалась. Просмотрите журнал сборки. (MT5202)


После этого я попытался связать свою библиотеку .a используя Addtional mtouch аргументы. После добавления этих аргументов я получаю новую ошибку.

Не удалось разобрать аргументы командной строки: Невозможно связать незарегистрированную опцию '-o'.

Может кто-то помочь мне в решении этих вопросов.

+0

это C++? если это так, есть специальный флаг для пропуска –

+0

I Добавлен IsCxx = ture в Linkwith и в дополнительных аргументах mtouch Аргументы I metioned -cxx -gcc_flags. Но я не могу решить эту проблему. – user3124624

ответ

4

Наконец-то выяснилось, что ошибка!

[assembly: LinkWith (..., IsCxx = true, Frameworks = "CoreAudio AudioToolbox", LinkerFlags = "-lstdc++ -lz")] 

В прошивкой Связывание PROJET

Опции> Build> Compiler> Добавление Аргументы

-cxx -gcc_flags "-stdlib=libstdc++ -L${ProjectDir} -lMylibrary -force_load ${ProjectDir}/libMylibrary.a” 

В моем демонстрационном приложении

Функции> IOS Buidl> ДОПОЛНИТЕЛЬНО mtouch Аргументы

--gcc_flags="-stdlib=libstdc++" 

Предоставляя правильные флажки во всех местах, они разрешили мою проблему.

+0

FYI, у меня была аналогичная проблема, и я считаю, что нужны только бит LinkerFlags/IsCxx и -gcc_flags - средний для меня не имеет значения. (ForceLoad идет в linkwith.cs) –

7

Как упоминал Стефан, в LinkWithAttribute есть свойство IsCxx, которое вы можете установить, чтобы указать, что библиотека .a - это библиотека C++. Это решит ошибку std::ios_base::Init::Init().

Чтобы решить эту ошибку undefined symbol: _AudioFileClose, вы можете попробовать добавить в CoreAudio или, возможно, рамки AudioToolbox к списку рамок для связи с:

[assembly: LinkWith (..., IsCxx = true, Frameworks = "CoreAudio AudioToolbox")] 

Будем надеяться, даже если это не совсем работа, она будет получить вы направились в правильном направлении.

+0

Привет Добавлен IsCxx = true в LinkWith Но я все еще получаю: родная ссылка не удалась, undefined symbol: std :: ios_base :: Init :: Init(). Убедитесь, что все необходимые фреймворки указаны, а родные библиотеки правильно связаны. – user3124624

+0

Ошибка AudioFileClose была решена путем добавления Frameworks в файл LinkWith. – user3124624

0

Я решил эту проблему при установке новой версии Xcode. (сейчас 7.1) Ошибка вводит в заблуждение, но теперь она работает!

Смежные вопросы