Cross Platform Compilation di C ++ .exe

0

Mi è stato chiesto di riscrivere un vecchio progetto C / C ++ in C ++ 11. Il vecchio progetto è multipiattaforma, tuttavia, al fine di implementare il sistema su altre architetture, il processo corrente è quello di accedere a un servizio remoto che abbia tutte le piattaforme di destinazione disponibili (Red Hat Linux, Umbuntu, Sco Unix e altri) e crea l'exe su ciascuna piattaforma per la distribuzione.

C'è un modo in cui posso inviare all'utente un pacchetto che si autocompilerà sulla propria architettura e costruirà il exe corretto senza fornire il codice sorgente ?

Sono anche aperto alla cross-compilation per spostarmi dovendo accedere a server separati e compilare per ogni piattaforma. Quanto è facile o meno compilare un codice per diverse architetture usando un cross-compilatore?

    
posta MoonKnight 03.07.2014 - 14:45
fonte

4 risposte

3

No. Non è possibile compilare il codice sorgente senza il codice sorgente.

Ma puoi probabilmente compilare o addirittura compilare a croce il codice localmente e inviare i diversi file compilati

my_exe_rhel8
my_exe_ubuntu_x64

e l'utente può quindi avviare quello corretto.

Idealmente, dovresti già preparare i binari per quei sistemi, quindi per Ubuntu preparerai un .deb, per red hat, un rpm. In questo modo puoi rendere molto più semplice per i tuoi clienti assicurarsi che ottengano le versioni corrette, abbiano installato le dipendenze e così via ...

Come notato da Btrfl, è possibile utilizzare le macchine virtuali per creare facilmente una configurazione in cui è possibile compilare localmente tutti i file binari sulle rispettive piattaforme.

    
risposta data 03.07.2014 - 15:04
fonte
2

Suppongo che potresti compilare il codice sorgente in bytecode usando LLVM e quindi produrre binari usando quello, ma ... è un sacco di problemi sconosciuti per qualcosa che può essere facilmente corretto cambiando leggermente la tua posizione.

    
risposta data 03.07.2014 - 16:22
fonte
1

Se i file eseguibili non sono troppo grandi, è possibile comprimerli tutti insieme e quindi distribuire un programma di installazione che sceglie e installa l'eseguibile corretto? Il cliente finirebbe per ottenere una versione del codice compilato per ogni piattaforma, ma se li si comprime in un unico file non avrebbero mai saputo la differenza. Naturalmente, questo potrebbe non funzionare se si dispone di limiti di spazio.

    
risposta data 03.07.2014 - 16:00
fonte
1

L'unica altra cosa che penso che si possa fare è compilare l'origine ai file oggetto, inviarli ai file oggetto e poi farli collegare il codice alla loro estremità. Ma questo crea solo più problemi di quanti ne valga la pena.

Se il loro compilatore può vedere il codice sorgente, possono vedere il codice sorgente. Potresti, come alcuni suggeriscono, passare dal sorgente in basso ad una rappresentazione intermedia usata dal compilatore, ma che varia il compilatore al compilatore.

Ok, capisco, stai parlando di affittare il tempo della macchina per ogni build. I compilatori incrociati potrebbero aiutare, ma l'ho visto solo per lo stesso O / S ma su un'architettura diversa (cross compilando un programma Linux per PPC su un x86).

Altrimenti, in una posizione simile, ho acquistato un server Sun Sparc after-market a basso costo per l'esecuzione di build Sparc per Ruby per i miei clienti. Non doveva essere veloce.

    
risposta data 03.07.2014 - 19:25
fonte

Leggi altre domande sui tag