Vincule la biblioteca estática de iOS a Xamarin.iOS y use la DLL

Soy capaz de crear con éxito el file DLL para mi biblioteca estática Objective-C . Pero cuando bash hacer reference a esa Xamarin.iOS desde la aplicación y la compilation de Xamarin.iOS , me está dando un montón de errores como …

Error MT5210: Error de enlace nativo, símbolo no definido: _AudioFileClose. Verifique que todos los frameworks necesarios hayan sido referencedos y que las bibliotecas nativas estén correctamente vinculados. (MT5210)

Error MT5210: Error de enlace nativo, símbolo no definido: std :: ios_base :: Init :: Init (). Verifique que todos los frameworks necesarios hayan sido referencedos y que las bibliotecas nativas estén correctamente vinculados. (MT5210)

Error MT5202: falla el enlace nativo. Revise el logging de construcción. (MT5202)


Después de esto, traté de vincular mi biblioteca .a usando Addtional mtouch Arguments. Después de agregar esos arguments, obtengo el nuevo error.

No se pudieron analizar los arguments de la línea de command: No se puede agrupar la opción no registrada '-o'.

¿Podría alguien ayudarme a resolver estos problemas?

Como mencionó Stephane, hay una propiedad IsCxx en LinkWithAttribute que puede configurar para especificar que la biblioteca .a es una biblioteca c ++. Eso resolverá el std::ios_base::Init::Init() .

Para resolver el undefined symbol: _AudioFileClose error, puede intentar agregar el CoreAudio o quizás el marco de AudioToolbox a la list de frameworks para vincular en contra:

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

Con suerte, incluso si eso no funciona, te llevará en la dirección correcta.

¡Finalmente descubrí el error!

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

En iOS Binding Projet

Opciones> Generar> Comstackdor> Argumentos de sum

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

En mi aplicación de demostración

Opciones> iOS Buidl> Argumentos adicionales de mtouch

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

Al dar las banderas adecuadas en todos los lugares, resolvió mi problema.

Resolví este problema al instalar la nueva versión de Xcode. (ahora 7.1) ¡El error es engañoso pero ahora funciona!