View Full Version : [c++] eseguibile che su win 7 funziona ma non su win xp
Salve a tutti,
ho compilato un programma che su win 7 (sia 32bit che 64) funziona a meraviglia mentre mi genera il seguente errore in ambiente win xp:
http://i69.servimg.com/u/f69/12/69/62/20/immagi10.jpg
Da cosa può dipendere?
Il codice viene inizialmente eseguito e pare bloccarsi poco dopo un ciclo while.
Forse ci sono delle DLL o librerie diverse fra xp e win 7?
Vi prego di aiutarmi,
Grazie anticipatamente a tutti.
tomminno
04-05-2010, 11:39
Senza uno straccio di codice è impossibile affermare con sicurezza perchè non funziona. Le possibilità sono tante.
double p, a, ecc, incl, node, argp, nu, m, arglat, truelon, lonper;
double sec, jd, rad, tsince, startmfe, stopmfe, deltamin;
double tumin, mu, radiusearthkm, xke, j2, j3, j4, j3oj2;
int year; int mon; int day; int hr; int min;
while (feof(infile) == 0)
{
do
{
....
} while ((strcmp(str, "#")==0)&&(feof(infile) == 0));
if (feof(infile) == 0)
{
fgets( longstr2,130,infile);
twoline2rv( longstr1, longstr2, typerun, typeinput, opsmode, whichconst,
startmfe, stopmfe, deltamin, satrec );
// fprintf(outfile, "%ld xx\n", satrec.satnum);
printf(" %ld\n", satrec.satnum);
Fin qui il codice regge, dalla riga sotto in poi crasha
tsince = ((jd_r-satrec.jdsatepoch)*1440);
tomminno
05-05-2010, 08:50
tsince = ((jd_r-satrec.jdsatepoch)*1440);
jd_r e satrec.jdsatepoch (e satrec) che tipi sono?
Mi sembra difficile che sia quella la riga che causa il problema.
Hai provato in debug?
Il programma mi sembra scritto in C più che in C++, quindi suppongo che la gestione delle eccezioni non ci sia. Probabilmente sfori qualche buffer, solo che nel codice che hai postato ci sono solo variabili numeriche e a meno di non dividere per 0 mi sembra difficile ottenere un errore tale da far crashare il programma.
!k-0t1c!
05-05-2010, 10:09
MingW è, risaputamente, tutt'altro che il meglio che puoi usare per compilare su Windows. Se ti è possibile ti consiglio di usare l'ultimo compilatore microsoft o intel. Il problema potrebbe infatti dipendere da un'implementazione buggata in MingW per qualche funzione di libreria.
Ad ogni modo non capisco il perché della segretezza del nome del programma etc quando il codice proviene chiaramente da questo articolo (Revisiting Spacetrack Report #3) (http://celestrak.com/publications/AIAA/2006-6753/AIAA-2006-6753-Rev1.pdf)
Avevo provato con visual c++ ma non mi ci sono trovato per niente bene, invece con wxDev c++ non ho avuto problemi.
Ho trovato l'errore che consisteva in un fclose posizionato troppo presto.
Quali sono i compilatori intel?
Mi sono affacciato su questo campo per esigenza da poco più di una settimana.
Sì le librerie sono quelle del SGP4 che hai riportato ma questo non vuol dire che io non le abbia drasticamente modificate ed ampliate per il mio scopo.
L'esperienza in altri ambiti mi ha insegnato che è sempre meglio tenersi le cose per sé (già avuto a che fare con diaspore di codice utilizzate da terzi e spacciate per proprie :D ).
MingW è, risaputamente, tutt'altro che il meglio che puoi usare per compilare su Windows. Se ti è possibile ti consiglio di usare l'ultimo compilatore microsoft o intel. Il problema potrebbe infatti dipendere da un'implementazione buggata in MingW per qualche funzione di libreria.
Oddio, è un'affermazione un po' forte.... Per C è sicuramente meglio del compilatore Microsoft, che è rimasto eoni indietro con il supporto allo standard.
!k-0t1c!
05-05-2010, 21:55
Oddio, è un'affermazione un po' forte.... Per C è sicuramente meglio del compilatore Microsoft, che è rimasto eoni indietro con il supporto allo standard.
Vero, ma se quel che serve è un'implementazione solida per un programma più vicino al C89 che al C99 allora il compilatore MSFT va bene.
A parte questo il compilatore intel C/C++ (http://software.intel.com/en-us/intel-compilers/) ha tutto quel che serve e funziona perfettamente su windows (oltre a integrarsi decentemente con visual studio) ;) C'è sempre l'alternativa...
Vero, ma se quel che serve è un'implementazione solida per un programma più vicino al C89 che al C99 allora il compilatore MSFT va bene.
A parte questo il compilatore intel C/C++ (http://software.intel.com/en-us/intel-compilers/) ha tutto quel che serve e funziona perfettamente su windows (oltre a integrarsi decentemente con visual studio) ;) C'è sempre l'alternativa...
Peccato che sia a pagamento ;)
Io sinceramente ho usato molto spesso MinGW su Windows e non mai avuto problemi. Certo non mi metto ad usarlo per programmare intensivamente con le API di Windows.
Rizzolo: l'unico consiglio che ti posso dare è buttare wxDevC++, quello che sì che crea problemi. Usa una nightly build di Code::Blocks... Come compilatore, scaricati l'ultima versione di MinGW GCC dal relativo sito.
E poi si dice che l'ICC non faccia alcuna ottimizzazione (anzi) su piattaforma AMD con risultati abbastanza deludenti...
!k-0t1c!
06-05-2010, 10:05
E poi si dice che l'ICC non faccia alcuna ottimizzazione (anzi) su piattaforma AMD con risultati abbastanza deludenti...
L'ICC testa usando cpuid il processore in uso e a seconda degli switch dati per compilare si comporta così:
Richiede processore Intel con caratteristiche date minime (a scelta in fase di compilazione) e se non è presente esce dal programma con un messaggio di errore.
Se la CPU non è conforme al minimo specificato in fase di compilazione procede all'esecuzione di una versione non ottimizzata del codice.
Il compilatore Intel fa, tra le altre, delle ottimizzazioni molto specifiche per l'implementazione delle sue CPU (in maniera tale, ad esempio, da ottimizzare l'uso della cache e minimizzare i miss) e quindi, nonostante la validità generica di certe ottimizzazioni quali loop unrolling e parallelizzazione automatica, molto del lavoro sarebbe comunque inutile agli utenti AMD.
Quanto a MingW mi pare che abbia ancora lo stupido passaggio di parametri con MOV. Non si capisce perché non abbiano ancora imparato che esiste push e che push è molto più efficiente rispetto a MOV nei processori odierni...usare MOV per i parametri è come usare MOV EAX, 0 invece che XOR EAX, EAX. Puro delirio...
Quanto a MingW mi pare che abbia ancora lo stupido passaggio di parametri con MOV. Non si capisce perché non abbiano ancora imparato che esiste push e che push è molto più efficiente rispetto a MOV nei processori odierni...usare MOV per i parametri è come usare MOV EAX, 0 invece che XOR EAX, EAX. Puro delirio...
No, il passaggio dei parametri con MOV c'è solo su X86-64 e sono le specifiche di programmazione a richiederlo.
Invece passare i parametri con MOV è molto più efficiente che usare lo stack nei processori moderni.
Il compilatore Intel fa, tra le altre, delle ottimizzazioni molto specifiche per l'implementazione delle sue CPU (in maniera tale, ad esempio, da ottimizzare l'uso della cache e minimizzare i miss) e quindi, nonostante la validità generica di certe ottimizzazioni quali loop unrolling e parallelizzazione automatica, molto del lavoro sarebbe comunque inutile agli utenti AMD.
Strano, allora perché patchando gli eseguibili per saltare il CPU dispatch gli eseguibili sui processori AMD vanno più veloci ?
Rizzolo: l'unico consiglio che ti posso dare è buttare wxDevC++, quello che sì che crea problemi. Usa una nightly build di Code::Blocks... Come compilatore, scaricati l'ultima versione di MinGW GCC dal relativo sito.
Fantastico e io che pensavo fosse buono, adesso sto scaricando "codeblocks-8.02mingw-setup.exe"; a vedere dagli screen sembra molto simile, vediamo come va.
http://i69.servimg.com/u/f69/12/69/62/20/cattur10.png
Che mi consigli di utilizzare fra queste opzioni?
Devi scaricare anche mingw gcc ed installarlo: http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/MinGW%205.1.6/MinGW-5.1.6.exe/download
Comunque ti avevo detto di installare una nightly build: http://forums.codeblocks.org/index.php/topic,3232.0.html
Questa ad esempio: http://forums.codeblocks.org/index.php/topic,10406.0.html
Se non ricordo male la versione non Professional di ICC non è a pagamento. Io l'ho installata senza problemi. Su Linux però.
Se non ricordo male la versione non Professional di ICC non è a pagamento. Io l'ho installata senza problemi. Su Linux però.
Solo su Linux ed è utilizzabile solo per uso personale ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.