2012-07-11 2 views
5

Ho compilato correttamente un programma (incluso SDL) sul mio computer (Ubuntu 12) e lo a.out funziona bene!in esecuzione su un altro computer

Ora, se invio lo a.out a un amico, non funziona. (fornisce un semplice messaggio di errore ("Can't be run..") o qualcosa del genere) Ma se compilo di nuovo il file sorgente corrispondente sul computer dei miei amici, funziona!

Come devo imballare/compilare/rendere il mio programma per renderlo eseguibile su un altro computer?

+2

Probabilmente non ha versioni compatibili delle librerie - SDL, glibc, forse anche libstdC++. Che versioni hai e quali versioni ha? Potresti riuscire a scappare staticamente dal tuo binario, altrimenti dovrai compilare la versione minima della libreria che vorresti supportare. – Rup

+0

Potrebbe essere necessario eseguire un chmod sull'exe, ma la risposta di seguito si applica ed è la soluzione da seguire suggerire – mathematician1975

+9

Questa è una buona domanda. In quarant'anni nessuno ha trovato una risposta semplice. –

risposta

5

I file eseguibili sono spesso specifici per l'ambiente/macchina su cui sono stati creati. Anche se sono coinvolti lo stesso processore/hardware, potrebbero esserci delle dipendenze sulle librerie che potrebbero impedire agli eseguibili di funzionare solo su altri computer.

È sufficiente inviare il codice sorgente con le istruzioni da compilare? Presumere che vi sia alcun NDA o altri problemi impediscono che l'approccio (suggerisco solo che da quando lei ha citato questo ha lavorato per voi)

Naturalmente, alla fine è possibile, dopo tutto è così che i binari sono distribuiti, ma sarà costruito con cura e avrà librerie collegate staticamente (cioè tutto fa parte dell'eseguibile).

+0

Non ho la sorgente qui ora, ma questo frammento qui dovrebbe avere lo stesso effetto: http://lazyfoo.net/SDL_tutorials/lesson01/linux/cli/index.php – user1511417

+0

Penso che SDL sia il problema .. non so – user1511417

+0

@ user1511417 probabilmente, non mi è familiare, purtroppo. Ma questo non è un problema/dilemma non comune (distribuzione di software) che hai sperimentato. – Levon

0

chiedi al tuo amico per effettuare le seguenti operazioni:

chmod +x a.out 
ldd a.out 

Che cosa vede? Presumo, ovviamente, che i due ambienti siano in gran parte simili (ad esempio, eseguono entrambi Ubuntu, ecc.)

+0

Penso seriamente, questo è ciò di cui ha bisogno. Inoltre, la distribuzione di binari quando la fonte è disponibile è qualcosa che dovresti evitare se puoi. (Immagino che nessuna NDA sia coinvolta qui). – Aftnix