Come io parto dal presupposto che si desidera i significati dei comandi
comando di compilazione simile a:
rapida -frontend -gnone -O -Xfrontend -disable-red-zone -Xcc -mno-red-zone -Xcc -mno-MMX -Xcc -mno-sse -Xcc -mno -sse2 -parse-as-library -import-objc-header -whole-module-optimization -module-name MyModule -emit-object -o -gnone disabilita le informazioni di debug che probabilmente non sono molto utili finché non si ha una sorta di supporto per il debugger
-O è per l'ottimizzazione, le altre opzioni sono -Onone che lo spegne ma produce una maggiore quantità di codice e -Ounchecked che è -O ma senza controlli extra dopo determinate operazioni. -O produce un buon codice ma tende a incorporare tutto in un'unica grande funzione che può rendere difficile l'allenamento cosa è andato storto quando un gestore di eccezioni fornisce semplicemente il puntatore dell'istruzione come origine di un errore.
-Xfrontend -disable-red-zone garantisce che il codice generato da swiftc non generi codice di zona rossa.
-Xcc -mno-red-zone indica al compilatore clang di non utilizzare la zona rossa su tutti i file che compila.clang è usato se c'è un codice nel file di intestazione che usi, probabilmente sarà il caso come verrà mostrato.
-Xcc -mno-MMX -Xcc -mno-SSE -Xcc -mno-SSE2 utilizza le opzioni clang per dire swiftc di non usare MMX/SSE/SSE2
-parse-as-biblioteca significa che il codice non è una sceneggiatura.
-import-objc-header consente di importare un file di intestazione .h che consente l'accesso alla funzione C e alle definizioni di tipo.
-module-name è richiesto anche se è utilizzato solo in qualifica completa dei nomi dei metodi e delle funzioni. Tuttavia i file di modulo reali non vengono creati con questa opzione.
Biblioteche
Ora che un file ELF .o è stato prodotto ha bisogno di essere collegato a un eseguibile finale. Swift richiede che il suo stdlib sia collegato in quanto fornisce alcune funzioni di base che sono necessarie a Swift in fase di runtime.
Il nome della libreria è libswiftCore.a e dovrebbe essere in lib/swift_static/linux nella directory di installazione.
libswiftCore.a si basa su libc, libcpp e su alcune altre librerie di sistema, tuttavia non sono disponibili, pertanto è necessario emulare le funzioni mancanti. L'elenco completo dei simboli che devono essere attuate può essere trovato qui: - https://github.com/spevans/swift-project1/blob/master/doc/symbols.txt
Hai trovato una soluzione? –
No, non l'ho fatto, tutto quello che pensavo era che potevo fare una soluzione alternativa e scrivere le mie funzioni (su una sola riga) che ognuno chiamava semplicemente una funzione Swift. In questo modo ho potuto verificare quali delle mie funzioni venivano chiamate e quindi sapevo quale fosse il metodo Swift. Non è una grande soluzione però. – rankAmateur