Duplicate symbols for architecture x86_64 e Xcode

Condividi questo articolo:


Ora ho la stessa domanda con il titolo di cui sopra, ma non ho ancora trovato la risposta giusta. Ho trovato l’errore:

/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in
:
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld
: 75 duplicate symbols for architecture x86_64
clang
: error: linker command failed with exit code 1 (use -v to see invocation)

Qualsiasi aiuto è apprezzato.

Finalmente scopro il motivo di questo errore perché ho aggiunto -ObjC alle altre Bandiere Linker. Dopo aver rimosso questo valore posso costruire il mio progetto con successo, ma non so perché. Qualcuno può spiegarmelo?

Soluzione a Duplicate symbols for architecture x86_64 e Xcode

Significa che avete caricato le stesse funzioni due volte. Poiché il problema scompare dopo la rimozione di -ObjC da Altre Bandiere Linker, ciò significa che questa opzione comporta che le funzioni vengono caricate due volte:

da Q&A tecnico

Questo flag fa sì che il linker carichi ogni file di oggetto nella libreria che definisce una classe o categoria Objective-C. Anche se questa opzione tipicamente risulterà in un eseguibile più grande (a causa del codice oggetto aggiuntivo caricato nell’applicazione), permetterà la creazione di efficaci librerie statiche Objective-C che contengono categorie su classi esistenti.
https://developer.apple.com/library/content/qa/qa1490/_index.html

Oppure:

Per me, cambiando ‘No Common Blocks’ da Sì a No ( Targets->Build Settings->Apple LLVM – Code Generation ) ha risolto il problema.

Il modo più veloce per trovare i duplicati è:

  1. Go to Targets
  2. Go to Build Phases
  3. Go to Compile Sources
  4. Delete duplicate files.

errore: React Native XCode Project Product Archive Fails with duplicate symbols for architecture arm64

XCode Log
Stranamente, non riesco a far funzionare Archive in XCode ma la compilazione riesce senza gli errori sui simboli duplicati se non tento di archiviare ma semplicemente costruisco una versione di rilascio. Il progetto costruisce correttamente anche sui dispositivi.

Ho cercato su questo argomento e ho provato a disabilitare la testabilità, e impostando i “No Common Blocks” nelle impostazioni del progetto anche su NO, ma finora non ho avuto fortuna.

Il progetto è un progetto basato su React Native 0.40 con CocoaPods installati. PodFile è questo

# You Podfile should look similar to this file. React Native currently does not support use_frameworks!
source
'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'

# Change 'AirMapsExplorer' to match the target in your Xcode project.
target
'StreetSmart' do
pod
'React', path: '../node_modules/react-native', :subspecs => [
'Core',
'RCTActionSheet',
'RCTAnimation',
'RCTGeolocation',
'RCTImage',
'RCTLinkingIOS',
'RCTNetwork',
'RCTSettings',
'RCTText',
'RCTVibration',
'RCTWebSocket'
]

pod 'GoogleMaps' # <~~ remove this line if you do not want to support GoogleMaps on iOS

# when not using frameworks we can do this instead of including the source files in our project (1/4):
# pod 'react-native-maps', path: '../../'
# pod 'react-native-google-maps', path: '../../' # <~~ if you need GoogleMaps support on iOS
end

La versione XCode è la 8.2.1, e il file di progetto viene aperto tramite .xcworkspace dal momento che i pod sono installati.

Apprezzerei davvero qualsiasi aiuto o approfondimento su questo, sono rimasto bloccato a questo per ore.

Così ho fatto ancora più ricerche su questo e il workaround è in realtà molto più semplice. O almeno lo era nel mio caso. Il problema è che quando si dichiara React nel podfile, il Pods xcodeproject ottiene un target React come parte del processo di installazione del pod. Avere questo target nel progetto Pods è ciò che causa l’errore quando si archivia. Quindi la soluzione è rimuovere il target.

 

 

Il problema con la rimozione del target in xCode è che questo modifica effettivamente il file project.pbxproj all’interno della cartella Pods che non è in controllo di versione. Quindi, mentre la build archivierà una volta fatto questo, se si esegue il deploy da qualsiasi altro posto che non sia la macchina che l’ha rimosso manualmente, continuerà a fallire. Quindi la soluzione è aggiungere questo comando post install in fondo al podfile:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "React"
      target.remove_from_project
    end
  end
end

Questo semplicemente attraversa tutti i pod da installare e rimuove l’obiettivo per quello di React. In questo modo, ovunque si costruisce il progetto, si rimuoverà anche il target. Ora, quando si costruisce per archiviare non fallirà.


Per ulteriori informazioni visita il sito: immagi.net

Condividi questo articolo: