2013-09-25 3 views
14

Come precedentemente indicato, here, ___sincos_stret non può essere trovato durante la compilazione di un progetto che utilizza questo simbolo utilizzando gli strumenti della riga di comando Xcode5.___sincos_stret simbolo non definito durante il collegamento

Nel thread sopra indicato viene pubblicata una soluzione per i target IOS (passando -miphoneos-version-min=5.0 al compilatore), esiste una soluzione per gli obiettivi desktop (x64)?

Ad esempio, per esempio, quando provo a compilare polycode.

Edit 2:

Stranamente, dopo la compilazione delle librerie di riferimento nella precedente errore manualmente, l'errore ora sembra essere situato in lto.o, che è un'intestazione llvm interna stessa ...

undef: ___sincos_stret 
Undefined symbols for architecture x86_64: 
    "___sincos_stret", referenced from: 
     _mdct_init in lto.o 
     _dradfg in lto.o 

Sto utilizzando OSX 10.9 DP con Xcode 5. This is the link step.

+0

Si prega di scrivere una domanda autonomo senza fare riferimento a un altro thread . – lpapp

+1

@LaszloPapp Sembra essere un problema generale con Xcode5, non so come rendere questa domanda più autonoma, tranne copiare e incollare la risposta dell'altro thread in esso. – Appleshell

+0

Si prega di copiare e incollare quindi, ma solo la parte strettamente pertinente. – lpapp

risposta

3

Sembra che la rimozione e la reinstallazione di Xcode5 DP e degli strumenti della riga di comando OSX 10.9 abbiano risolto il problema. Immagino ci sia stato un problema con l'aggiornamento delle versioni precedenti.

+1

Perché è stata accettata questa risposta? Non è giusto ... – trojanfoe

+0

@trojanfoe Perché è stato risolto il problema. – Appleshell

+0

Per favore, potresti elaborare un po 'su come Xcode" non installato "e gli strumenti di CL ? Hai semplicemente cancellato Xcode e reinstallarlo o hai dovuto fare qualcos'altro? – Chris

13

stret è Apple-speak per "restituisce una struttura". ___sincos_stret è un'ottimizzazione LLVM: se si scrive codice che chiama sin(n) e quindi cos(n) e utilizza entrambi i risultati, il compilatore effettuerà una chiamata al metodo sinco di ritorno della struttura, ricevendo una struttura con entrambe le cose. È più veloce allenarsi contemporaneamente, piuttosto che individualmente, se l'operando è lo stesso.

Su una navigazione superficiale non riesco a vedere uno sin o cos in initInterTab2D ma mi aspetto che qualcosa sia in linea.

Mentre rovistando ho provato:

cd /Applications/Xcode.app/Contents/Developer/Platforms 
grep -lr ___sincos_stret * 

Via che e utilizzando nm sui probabili risultati, ho trovato la funzione ___sincos_stret è esposto in entrambi iOS dal 7.0 e OS X dal 10.9 come parte dei loro libsystem_m.dylib s. Per esempio. se il vostro Xcode è installato al posto di default, prova:

nm /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system/libsystem_m.dylib | grep sincos 

E/o:

nm /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib/system/libsystem_m.dylib | grep sincos 

vedrete il simbolo in uno di quelli. Quindi la soluzione corretta sarebbe quella di impostare una destinazione di distribuzione più vecchia in Xcode, o fare l'equivalente nel tuo makefile.

+0

Sono abbastanza sicuro di aver costruito per OSX. Uso un file cmake da un progetto e compilo il progetto con make. Aggiungerò uno degli errori nella domanda. – Appleshell

+1

Il simbolo '__sincos_stret' è fornito da'/usr/lib/system/libsystem_m.dylib' su OS X, proprio come iOS. Il problema del questionario è che il compilatore sta generando il simbolo in uno o più file oggetto perché nel passaggio di compilazione non è specificata alcuna versione del sistema operativo mirata (quindi è la versione del sistema host predefinita), ma il passaggio del collegamento sta specificando una versione del sistema operativo <10,9 , su cui il simbolo non è disponibile. –

+0

@StephenCanon 10.9 è la versione beta attualmente in NDA, giusto? Quindi non sono riuscito a trovare il simbolo perché non ho il beta SDK, ma è già sostituito dal compilatore perché molte altre persone lo fanno? – Tommy

6

Si desidera -mmacosx-version-min=10.8 (o qualunque sia la versione del SO di destinazione).

+1

Questo sembra avere senso, ma anche se aggiungo l'argomento a CXXFLAGS in ogni comando cmake l'errore persiste. fare qualcosa di sbagliato però - [questa è la mia attuale procedura di make per questo caso] (http://pastebin.com/J7qmNegN) (non può testare attualmente con altri progetti) – Appleshell

+0

Hai provato a usare l'interfaccia basata su curses 'ccmake' ? – Gerard

+1

Ci siamo imbattuti in questo quando ci si collegava a ICU per un progetto utilizzando un OS X OSK precedente. Ciò che ha funzionato è stato costruire ICU con '-isysroot' e' -mmacosx-version-min' impostato in 'CPPFLAGS' ** e * * 'LDFLAGS'. – Eric3

2

Aprire il seguente file in un editor di testo /opt/local/etc/macports/macports.conf e aggiungere lì a righe come

# MACOSX_DEPLOYMENT_TARGET - osx version to be compatible with earlier OSX version. 
macosx_deployment_target   10.8 
MACOSX_DEPLOYMENT_TARGET   10.8