2016-07-04 43 views
10

Sto provando a collegare un progetto nativo complicato per Xamarin. E 'Progetto Obj-C UI che dipende da Native Obc-C++ involucro oltre libreria C++ (questo progetto è incorporato): enter image description hereXamarin iOS Il collegamento nativo funziona su Simulatore, simboli duplicati sul dispositivo

ho fonte nativa e progetto di test in Xcode e tutto va bene.

Quindi creo librerie di grassi di tutte le dipendenze, aggiungendole al progetto di associazione xamarin.

enter image description here

Nel progetto principale che ho avuto alle opzioni di configurazione gcc stessi per simulatore e dispositivo:

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

tutto funziona bene su Simulatore ma quando sto cercando di compilare questo per il dispositivo, linker ci riesce Collega le librerie a causa dei simboli duplicati. Ho controllato tutte le librerie usando 'nm' tutti gli oggetti hanno lo stesso aspetto per Simulatore e Dispositivo. Ho visto che solo gli oggetti duplicati sono classi Obj-C++ nel wrapper incorporato (rmsdk_wrapper2.xcodeproj). nm trova gli oggetti in wrapper lib e in lib dal progetto host (TestRMSD.xcodeproj). Ma per il simulatore si risolve bene, né per il dispositivo.

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

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

ho bisogno di qualche idea di come posso risolvere questo problema.

+0

Chiunque? Qualche idea? – ad1Dima

+0

Potresti condividere l'intero [registro di build] (https://kb.xamarin.com/customer/en/portal/articles/1675684-where-can-i-indire-my-version-information-and-logs-# verbose-build-output-logs) durante la creazione del dispositivo. Quale versione di Xamarin.iOS stai usando? –

+0

@Prashant ha aggiornato la mia domanda – ad1Dima

risposta

0

ho dovuto spostare tutto il codice nativo in un progetto per risolvere questo problema. Quindi ho una lib e nessun errore di collegamento sul dispositivo.

Ma non ho capito cosa c'era di sbagliato nel linker.

1

motivi possibili di questo errore:

  • La stessa libreria nativa è incluso due volte.
  • Due librerie native distinte capita di definire gli stessi simboli.
  • Una libreria nativa non è stata creata correttamente e contiene lo stesso simbolo più di una volta.

È possibile trovare i passaggi di risoluzione dei problemi per gli errori che collegano qui: https://developer.xamarin.com/guides/ios/troubleshooting/mtouch-errors/#MT5212

+0

come ho menzionato in questione. 'nm' mostra RMSDKSettings.o sia in AllbraryReader.a che in librmsdk_wrapper2_iOS.a sia per le librerie di simulatori che per i dispositivi. Ma il collegamento del simulatore funziona alla grande, il dispositivo no. Tuttavia RMSDKSettings viene aggiunto solo in rmsdk_wrapper – ad1Dima

+0

@ ad1Dima Qualcuno dei rimedi menzionati nella documentazione ha aiutato a risolvere il problema? Ad esempio, usando il flag '-gcc_flags -dead_strip' –

+0

in Domanda e compilando i log puoi vedere' -dead_strip' e '-gcc_flags', e tutti gli altri flag di mtouch. Sono uguali per simulatore e dispositivo. – ad1Dima

Problemi correlati