Xamarin iOS Native link работает на симуляторе, дублирует символы на устройстве

Я пытаюсь связать сложный нативный проект для Xamarin. Это проект пользовательского интерфейса Obj-C, который зависит от Native Obc-C ++ оболочки над библиотекой c ++ (это встроенный проект):
введите описание изображения здесь

У меня есть исходный код и тестовый проект в Xcode, и все идет хорошо.

Затем я делаю толстые библиотеки всех зависимостей, добавляю их в проект связывания xamarin.

введите описание изображения здесь

В основном проекте мне нужно было настроить параметры gcc для симулятора и устройства:

-vvvv -cxx --registrar:static -gcc_flags "-L${ProjectDir}/../RMSDKWrapper -dead_strip -lstdc++ -lstdc++.6.0.9 -lpthread -lsqlite3 -lxml2 -ObjC -ladept-iOS -lxml-iOS -lz -lcurl -lssl -lcrypto -ldp-iOS -lePub3-iOS -L/usr/lib -I/usr/include/libxml2"

Все отлично работает на симуляторе, но когда я пытаюсь скомпилировать это для устройства, компоновщик не может связать библиотеки из-за дублирования символов. Я проверил все библиотеки, используя ‘nm’, все объекты выглядят одинаково для Simulator и Device.
Я видел, что только объекты, которые дублируются, это классы Obj-C ++ во встроенной оболочке (rmsdk_wrapper2.xcodeproj). nm находит эти объекты в оболочке lib и в lib из хост-проекта (TestRMSD.xcodeproj). Но для симулятора это решает хорошо, ни для устройства.

UPD
Версия XS:
https://gist.github.com/ad1Dima/eb1cc390930e191a5454260da2410c91

Журнал сборки:
https://gist.github.com/ad1Dima/8ea8c4a271ef63efb310252234b32ae5

Мне нужна идея, как я могу решить эту проблему.

10

Решение

Возможные причины этой ошибки:

  • Одна и та же нативная библиотека включена дважды.
  • Две разные нативные библиотеки определяют одинаковые символы.
  • Собственная библиотека построена неправильно и содержит один и тот же символ более одного раза.

Вы можете найти шаги по устранению ошибок связывания здесь: https://developer.xamarin.com/guides/ios/troubleshooting/mtouch-errors/#MT5212

1

Другие решения

Мне пришлось переместить весь нативный код в одном проекте, чтобы решить эту проблему. Так что у меня есть одна библиотека и нет ошибок связывания на устройстве.

Но я не понял, что случилось с компоновщиком.

0

По вопросам рекламы [email protected]