Xamarin iOS родное соединение не удалось для grp c .core - PullRequest
2 голосов
/ 16 апреля 2020

Я пытался заставить grp c работать (ssl http2) на формах Xamarin, и после некоторой боли мне удалось заставить его работать на Android с использованием Grp c .Core. Однако я не смог получить iOS для компиляции. Работая над этой проблемой, я пытался получить что-то grp c, связанное с работой над iOS, и в конце концов нашел экспериментальную демоверсию grp c xamarin, HelloworldXamarin. Найдено здесь:

https://github.com/grpc/grpc/tree/master/examples/csharp/HelloworldXamarin

Я скачал решение, но при попытке его скомпилировать получаю следующие ошибки:

enter image description here

Текст ошибки:

Native linking failed, undefined symbol: operator delete(void*). Please verify that all the necessary frameworks have been referenced and native libraries are properly linked in.

Native linking failed. Please review the build log and the user flags provided to gcc: -LC:/g/examples/csharp/HelloworldXamarin/packages/Grpc.Core.2.23.0/build/Xamarin.iOS10/../../native/ios/universal -lgrpc_csharp_ext -force_load C:/g/examples/csharp/HelloworldXamarin/packages/Grpc.Core.2.23.0/build/Xamarin.iOS10/../../native/ios/universal/libgrpc_csharp_ext.a -LC:/g/examples/csharp/HelloworldXamarin/packages/Grpc.Core.2.23.0/build/Xamarin.iOS10/../../native/ios/universal -lgrpc -force_load C:/g/examples/csharp/HelloworldXamarin/packages/Grpc.Core.2.23.0/build/Xamarin.iOS10/../../native/ios/universal/libgrpc.a

linker command failed with exit code 1 (use -v to see invocation)

Для предупреждение о невозможности найти libgrpc_csharp_ext.a, я проверил, что файл был там.

Кажется, есть некоторая проблема с родными ссылками, с которой я очень незнаком. Я использую почти последнюю версию Visual Studio (ну, 16.5.3), хост сборки ma c с последней версией ОС и XCode. Не вносил никаких изменений в файлы, извлеченные из git. Я только начал работать с Xamarin iOS на этой неделе, так что все должно быть в состоянии "по умолчанию".

Что может быть не так с моей установкой / системой, которая делает это неработоспособным? Я понимаю, что это все еще экспериментальная функция, но я не могу сказать, сделал ли я что-то глупое или что-то изменилось (например, XCode? Или ему нужен VS 2017?), Который больше не работает? Кто-нибудь еще может заставить этот пример скомпилироваться?

Я также пробовал более новые версии пакетов nuget grp c, и это приводило только к большему количеству ошибок.

В конечном счете, я пытаюсь заставить последнюю версию Grp c .Core работать в iOS на Xamarin.Forms, хотя у меня очень мало опыта работы с iOS. Если есть проблемы с последними версиями XCode / Visual Studio / Grp c. Ядро, которые вызывают это, я готов попытаться решить их, если кто-то может указать мне правильное направление.

1 Ответ

2 голосов
/ 25 апреля 2020

Это никак не связано с вашими версиями или чем-то, что вы делали или не делали.

Первое для некоторой теории: если кто-то хочет использовать библиотеки Objective- C или пакеты CocoaPods в своих Проект Xamarin, для этого им нужно будет создать библиотеку связывания . Воспринимайте это как своего рода «мост» между нативной реализацией и более поздним C# кодом, который вы можете использовать. Подробнее о привязке вы можете узнать из официальной документации здесь , а точнее здесь .

Для суммирования информации - после создания привязок вы видите файл .lib или .a. Это именно то, что они сделали - выставили некоторый нативный код в libgrpc_csharp_ext.a. К сожалению, есть некоторые привязки, которые не являются правильными. Это именно то, что вы видите здесь - последствия неправильной привязки.

Глядя немного в проект, я пришел к следующим выводам:

  1. Существует открытая проблема от Май 2019 об этом - https://github.com/grpc/grpc/issues/19172 К сожалению, проблема все еще активна, и там нет движения.
  2. Я подтвердил, что после версии 1.21 (вкл.) сборка не работает. На данный момент вы можете перейти на версию 1.20.1 (последняя известная как работающая). Я успешно построил решение с его помощью. Пожалуйста, просмотрите журнал изменений и примечания к выпуску для этой конкретной c версии (если есть), чтобы узнать, подходит ли она вашим потребностям.

В основном у вас есть 2 варианта:

  1. Перейдите на последнюю хорошую версию, чтобы использовать ее;

  2. Если вы хотите использовать последнюю версию, либо подождите, пока проблема не будет устранена, либо форк репозиторий и помощь с исправлением.

Если вы хотите увидеть их скрипт сборки и помочь исправить проблему, вы можете начать с здесь .

Еще один полезный ресурс - это видео с официального канала Xamarin.

...