2016-07-04 15 views
10

Próbuję połączyć skomplikowany projekt natywny dla Xamarin. To projekt Obj-C UI, który zależy od Native OBC-C++ wrapper nad C++ biblioteki (jest osadzony projektu): enter image description hereXamarin iOS Łączenie natywne działa na symulatorze, duplikaty symboli na urządzeniu

mam własnego źródła i projekt testowy w Xcode i wszystko idzie dobrze.

Następnie tworzę fat biblioteki wszystkich zależności, dodam je do projektu wiązania xamarin.

enter image description here

W głównym projektu miałem do opcji konfiguracji samych gcc dla symulatora i urządzenia:

-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" 

wszystko działa poprawnie na symulatorze, ale gdy próbuję skompilować to dla urządzenia, łącznikowa może Łącza biblioteki z powodu duplikatów symboli. Sprawdziłem wszystkie biblioteki używając 'nm', wszystkie obiekty wyglądają tak samo dla Symulatora i Urządzenia. Widziałem, że tylko obiekty, które zostały zduplikowane, to klasy Obj-C++ we wbudowanym opakowaniu (rmsdk_wrapper2.xcodeproj). nm wyszukuje obiekty w bibliotece otoki i lib z hosta (TestRMSD.xcodeproj). Ale dla symulatora dobrze się sprawdza, nie dla urządzenia.

UPD XS Wersja: https://gist.github.com/ad1Dima/eb1cc390930e191a5454260da2410c91

Budowa Log: https://gist.github.com/ad1Dima/8ea8c4a271ef63efb310252234b32ae5

muszę jakiś pomysł jak mogę rozwiązać ten problem.

+0

Ktoś? Dowolny pomysł? – ad1Dima

+0

Czy możesz udostępnić pełny [dziennik kompilacji] (https://kb.xamarin.com/customer/en/portal/articles/1675684-where-can-i-find-my-version-information-and-logs-# verbose-build-output-logs) podczas budowania dla urządzenia. Jakiej wersji Xamarin.iOS używasz? –

+0

@Prashant zaktualizował moje pytanie – ad1Dima

Odpowiedz

0

musiałem przenieść cały natywny kod w jednym projekcie, aby rozwiązać ten problem. Więc mam jedną lib i brak błędów linkowania na urządzeniu.

Ale nie rozumiem, co było nie tak z linkerem.

1

Możliwe przyczyny tego błędu:

  • To samo natywna biblioteka jest wliczony dwukrotnie.
  • Dwie odrębne biblioteki natywne zdają się definiować te same symbole.
  • Biblioteka natywna nie jest poprawnie zbudowana i zawiera ten sam symbol więcej niż jeden raz.

można znaleźć kroki rozwiązywania problemów dla łączących błędów tutaj: https://developer.xamarin.com/guides/ios/troubleshooting/mtouch-errors/#MT5212

+0

Jak już wspomniałem. 'nm' pokazuje RMSDKSettings.o w obu bibliotekach: AllbraryReader.a i librmsdk_wrapper2_iOS.a zarówno dla bibliotek symulacyjnych, jak i dla urządzenia. Ale łączenie symulatorów działa świetnie, urządzenie - nie. Jednak ustawienie RMSDKSettings jest dodawane tylko w pliku rmsdk_wrapper – ad1Dima

+0

@ ad1Dima Czy którekolwiek z obejść wymienionych w dokumentach pomogło w rozwiązaniu problemu? Na przykład, używając flagi '-gcc_flags -dead_strip' –

+0

w dziennikach pytań i kompilacji możesz zobaczyć' -dead_strip' i '-gcc_flags', i wszystkie inne flagi mtouch. Są takie same dla symulatora i urządzenia. – ad1Dima

Powiązane problemy