Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-09-2012, 10:18   #1
ciusss89
Senior Member
 
L'Avatar di ciusss89
 
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
[C++] PORTING DA WINDOWS A LINUX

Ciao gente, al momento mi sto provando a fare il porting di un'applicazione windows in linux per un progetto del politecnico, spero possiate darmi una mano:

Gli step compiuti e come ho ragionato :
Ho ipotizzato che prima di guardare il corpo del main, mi convenga mettere apposto tutto quello che include il main come librerie e funzioni e headers, ho quindi provveduto a ricercarmi le librerie mancanti e quelle equivalenti, e gli header necessari. Ho poi "verificato" la compatibilità della sostituzioni che effettuavo.
Ho proseguito creando un main vuoto (hello world) che includesse solo ed esclusivamente quello che include il main originale ( praticamente richiama un main.h). La compilazione di questo parziale risultato ha dato esito positivo.
(L'applicazione si appoggia a gnu_radio, e libusb, spesso è stato sufficiente sostiture l'equivalente xxx_win32.h con xxx_linux.h, o adattare qualche chiamata tipo xxx_win32 () in xxx_linx( ) )

Quando "ho unito" il main al resto del corpo del progamma, ecco il disastro, una gran quantita di errori, ma non credo dovuti al parte precedente.

Applicazione orginale (Source.zip)
L'ibrido da me creato (Ibrido.zip)
L'unione che non funzione (Err.zip)
Estrarre il contenuto per compilare [ $ g++ main.cpp -o test.o ]. Al momento il mio obiettivo è far compilare il binario.

Chi ha scritto il codice, non fornisce dettagli riguardo la piattaforma usata per la compilazione ne le modalità ...

COMPILANDO IL MAIN HELLO WORLD
Codice:
giuse@book-dk:~/MAIL_B/IBRID0$ cat main.cpp 
#include "main.h"

using namespace std;

int main(int argc ,char *argv[])
{
    cout << "Hello world!" << endl;
    return 0;
}

giuse@book-dk:~/MAIL_B/IBRID0$ g++ main.cpp -o test.o
In file included from main.h:7:0,
                 from main.cpp:1:
fx2.h:64:1: warning: ‘typedef’ was ignored in this declaration [enabled by default]
giuse@book-dk:~/MAIL_B/IBRID0$
COMPILANDO IL MAIN
Codice:
giuse@book-dk:~/MAIL_B/ERR$ g++ main.cpp -o test.o
In file included from main.h:7:0,
                 from main.cpp:68:
fx2.h:64:1: warning: ‘typedef’ was ignored in this declaration [enabled by default]
main.cpp: In function ‘int main(int, char**)’:
main.cpp:313:32: error: ‘DeleteFile’ was not declared in this scope
main.cpp:368:5: error: ‘HANDLE’ was not declared in this scope
main.cpp:368:12: error: expected ‘;’ before ‘hStdout’
main.cpp:369:5: error: ‘hStdout’ was not declared in this scope
main.cpp:369:32: error: ‘STD_OUTPUT_HANDLE’ was not declared in this scope
main.cpp:369:49: error: ‘GetStdHandle’ was not declared in this scope
main.cpp:370:5: error: ‘COORD’ was not declared in this scope
main.cpp:370:11: error: expected ‘;’ before ‘coord’
main.cpp:371:5: error: ‘CONSOLE_SCREEN_BUFFER_INFO’ was not declared in this scope
main.cpp:371:32: error: expected ‘;’ before ‘bInfo’
main.cpp:379:42: error: ‘bInfo’ was not declared in this scope
main.cpp:379:64: error: ‘SetConsoleCursorPosition’ was not declared in this scope
main.cpp:425:44: error: ‘bInfo’ was not declared in this scope
main.cpp:425:49: error: ‘GetConsoleScreenBufferInfo’ was not declared in this scope
main.cpp:427:64: error: ‘SetConsoleCursorPosition’ was not declared in this scope
main.cpp:436:48: error: ‘bInfo’ was not declared in this scope
main.cpp:436:70: error: ‘SetConsoleCursorPosition’ was not declared in this scope
main.cpp:514:39: error: ‘DeleteFile’ was not declared in this scope
main.cpp:584:35: error: ‘DeleteFile’ was not declared in this scope
giuse@book-dk:~/MAIL_B/ERR$
QUI IL MAIN, include esattamente main.h. Gli errori di compilazione non credo siano causati dalla lavoro fin'ora svolto.
FILE

Piccolo dettaglio io di c++ non so nulla.
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...
Vendo : ROUTER STATION PRO, SISTEMA EMEDDED.
ciusss89 è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2012, 10:32   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Il file che hai postato è scritto esplicitamente per Windows:

Codice:
    HANDLE hStdout;
    hStdout   =   GetStdHandle(STD_OUTPUT_HANDLE);
    COORD       coord;
    CONSOLE_SCREEN_BUFFER_INFO bInfo;
così ad occhio vengono usati per sovrascrivere caratteri sulla console.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2012, 10:42   #3
ciusss89
Senior Member
 
L'Avatar di ciusss89
 
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
In questa ipotesi devo tirare fuori l'algoritmo, cmq esplicitamente per Windows, da cosa lo deduci????

Cioè quel codice che hai evidenziato cosa fa??
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...
Vendo : ROUTER STATION PRO, SISTEMA EMEDDED.
ciusss89 è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2012, 11:12   #4
ciusss89
Senior Member
 
L'Avatar di ciusss89
 
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
Grazie alle tue dritte, ho eliminato tutta le rimanenti intrusioni riferite a windows, ora rimangono problemi sulla funzione DeleteFile

E' una funzione ansi c del c++???
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...
Vendo : ROUTER STATION PRO, SISTEMA EMEDDED.
ciusss89 è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2012, 11:16   #5
ciusss89
Senior Member
 
L'Avatar di ciusss89
 
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
risolto in parte DeleteFile non è ansi, sostituita con remove.

Ora ho altri problemi -.-

Codice:
giuse@book-dk:~/MAIL_B/IBRID0$ g++ main.cpp -o test.o 
In file included from main.h:7:0,
                 from main.cpp:5:
fx2.h:64:1: warning: ‘typedef’ was ignored in this declaration [enabled by default]
/tmp/cc93oJJZ.o: In function `main':
main.cpp:(.text+0xd9): undefined reference to `Fx2_dev::Fx2_dev(int)'
main.cpp:(.text+0xed): undefined reference to `Fx2_dev::Fx2_dev(int)'
main.cpp:(.text+0x118): undefined reference to `Fx2_dev::~Fx2_dev()'
main.cpp:(.text+0x127): undefined reference to `Fx2_dev::usb_fx2_find()'
main.cpp:(.text+0x152): undefined reference to `Fx2_dev::close()'
main.cpp:(.text+0x2d4): undefined reference to `FileSaver::FileSaver(char*)'
main.cpp:(.text+0x2ed): undefined reference to `FileSaver::open_file(char*)'
main.cpp:(.text+0x301): undefined reference to `FileSaver::set_fid(int)'
main.cpp:(.text+0x315): undefined reference to `FileSaver::set_decimate(unsigned int)'
main.cpp:(.text+0x329): undefined reference to `FileSaver::set_pack(unsigned int)'
main.cpp:(.text+0x342): undefined reference to `FileSaver::FileSaver(char*)'
main.cpp:(.text+0x35b): undefined reference to `FileSaver::open_file(char*)'
main.cpp:(.text+0x36f): undefined reference to `FileSaver::set_fid(int)'
main.cpp:(.text+0x383): undefined reference to `FileSaver::set_pack(unsigned int)'
main.cpp:(.text+0x397): undefined reference to `FileSaver::set_decimate(unsigned int)'
main.cpp:(.text+0x3ac): undefined reference to `FileSaver::close_file()'
main.cpp:(.text+0x3ca): undefined reference to `Fx2_dev::usb_fx2_init()'
main.cpp:(.text+0x3e3): undefined reference to `Fx2_dev::usrp_xfer(char, char)'
main.cpp:(.text+0x3fc): undefined reference to `Fx2_dev::usrp_xfer(char, char)'
main.cpp:(.text+0x415): undefined reference to `Fx2_dev::usrp_xfer(char, char)'
main.cpp:(.text+0x42e): undefined reference to `Fx2_dev::usrp_xfer(char, char)'
main.cpp:(.text+0x457): undefined reference to `Fx2_dev::usrp_xfer2(char, char, unsigned char*, char)'
main.cpp:(.text+0x470): undefined reference to `Fx2_dev::usrp_xfer(char, char)'
main.cpp:(.text+0x484): undefined reference to `FileSaver::set_decimate(unsigned int)'
main.cpp:(.text+0x532): undefined reference to `Fx2_dev::usrp_xfer(char, char)'
main.cpp:(.text+0x54b): undefined reference to `Fx2_dev::usrp_xfer(char, char)'
main.cpp:(.text+0x10f2): undefined reference to `Fx2_dev::check_rx_overrun(bool*)'
main.cpp:(.text+0x115a): undefined reference to `FileSaver::close_file()'
main.cpp:(.text+0x1169): undefined reference to `FileSaver::close_file()'
main.cpp:(.text+0x1343): undefined reference to `FileSaver::close_file()'
main.cpp:(.text+0x1361): undefined reference to `Fx2_dev::close()'
main.cpp:(.text+0x1370): undefined reference to `Fx2_dev::~Fx2_dev()'
main.cpp:(.text+0x1390): undefined reference to `Fx2_dev::read_IF(char*)'
main.cpp:(.text+0x13b8): undefined reference to `FileSaver::save_data(char*, unsigned int, int)'
main.cpp:(.text+0x168c): undefined reference to `FileSaver::close_file()'
main.cpp:(.text+0x169b): undefined reference to `FileSaver::close_file()'
main.cpp:(.text+0x16bf): undefined reference to `Fx2_dev::~Fx2_dev()'
main.cpp:(.text+0x16ce): undefined reference to `Fx2_dev::close()'
main.cpp:(.text+0x16dd): undefined reference to `Fx2_dev::~Fx2_dev()'
main.cpp:(.text+0x16fb): undefined reference to `Fx2_dev::~Fx2_dev()'
main.cpp:(.text+0x1720): undefined reference to `Fx2_dev::~Fx2_dev()'
collect2: error: ld returned 1 exit status
giuse@book-dk:~/MAIL_B/IBRID0$
L'errore è evidente il main, non ha accesso ai blocchi Fx2 e Fileserver, sembrano scorrelati...
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...
Vendo : ROUTER STATION PRO, SISTEMA EMEDDED.

Ultima modifica di ciusss89 : 27-09-2012 alle 11:24.
ciusss89 è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2012, 15:13   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Mi sa che ti mancano i file cpp (o la libreria) in cui è definito quel codice
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2012, 18:56   #7
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Uhi uhi, ora non so la complessità del programma originale, ma se quello non è stato scritto in ottica multipiatta son dolori a trasporlo per piattaforma linux, mi verrebbe quasi da pensare che sia più facile prendere i sorgenti e, seguendo la loro struttura riscrivere il tutto (magari prendendo a man bassa da quel codice, ma facendoti i vari step da te).

Che poi, altro particolare, tale programma immagino sia solo per console (altrimenti avresti avuto n-mila errori).
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2012, 19:06   #8
ciusss89
Senior Member
 
L'Avatar di ciusss89
 
Iscritto dal: Jul 2008
Città: mondovi
Messaggi: 1491
Quote:
Originariamente inviato da [Kendall] Guarda i messaggi
Uhi uhi, ora non so la complessità del programma originale, ma se quello non è stato scritto in ottica multipiatta son dolori a trasporlo per piattaforma linux, mi verrebbe quasi da pensare che sia più facile prendere i sorgenti e, seguendo la loro struttura riscrivere il tutto (magari prendendo a man bassa da quel codice, ma facendoti i vari step da te).

Che poi, altro particolare, tale programma immagino sia solo per console (altrimenti avresti avuto n-mila errori).
Si è solo per console, le prime due revisioni erano multipiattaforma, ma entrambe scritte con i piedi, ma tante ke non erano utilizzabili, hanno rilasciato questa terza versione, senza specificare un cazzo...

Chi ha pubblicato sta robaccia è il dipartimento aerospaziale della University of Colorado...
__________________
MB: Aw9d-max CPU: E6600 @ 3,32ghz (vcore default 1,275), DDR2 2x1gb 3/4/4/12 @ 2,10V , VGA: POV 8800 GTS 320mb 648/1458/975. RAFFREDDAMENTO A LIQUIDO ARTIGINALE ...
Vendo : ROUTER STATION PRO, SISTEMA EMEDDED.
ciusss89 è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2012, 19:50   #9
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Ah, sappi che se provi a compilare il programma modificato per win 100% non è più compatibile

In questi casi l'unica uscita sana è:
0) rimuovere tutta la roba "inutilmente" platform specific, ovvero tutta quella roba gestibile da ansi C + librerie crossplatform tipo files, sockets, threads; possibilmente dopo questo passo rimane poca roba non compatibile
1) individuare un subset limitato di "scambi" platform-specific che il programma fa con l'OS, riducendo all'osso la "generalità" di quello che può fare (es: aprire una finestra, gestire gli input, aprire un box con che dice qualcosa)
2) modificare questo subset per renderlo compatibile con linux/mac/iphone o quello che è, in modo da trovare un minimo comun denominatore funzionale tra i 2 os
3) scrivere degli header comuni + un set di .c per ogni OS che implementano le stesse funzioni sui diversi sistemi (uguali fino all'ultimo dettaglio!)
4) isolare il programma originale sostituendo tutte le chiamate all'OS con tutte le chiamate alla tua libreria
5) ripetere 3 e 4 testando e bestemmiando fin quando tutto funziona davvero come ti aspetti e gli undocumented behaviour inaspettati smettono di saltare fuori

protip: più questo "subset" è di basso livello, meno bestemmie dovrai tirare. La bravura sta tutta nel trovare i punti in comune tra gli OS

Ovviamente, questo se vuoi portarti dietro anche la versione windows... se la versione win è abbandonata converti tutto a linux e bona.
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 27-09-2012 alle 20:01.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2012, 00:16   #10
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da Tommo Guarda i messaggi
Ah, sappi che se provi a compilare il programma modificato per win 100% non è più compatibile

In questi casi l'unica uscita sana è:
0) rimuovere tutta la roba "inutilmente" platform specific, ovvero tutta quella roba gestibile da ansi C + librerie crossplatform tipo files, sockets, threads; possibilmente dopo questo passo rimane poca roba non compatibile
1) individuare un subset limitato di "scambi" platform-specific che il programma fa con l'OS, riducendo all'osso la "generalità" di quello che può fare (es: aprire una finestra, gestire gli input, aprire un box con che dice qualcosa)
2) modificare questo subset per renderlo compatibile con linux/mac/iphone o quello che è, in modo da trovare un minimo comun denominatore funzionale tra i 2 os
3) scrivere degli header comuni + un set di .c per ogni OS che implementano le stesse funzioni sui diversi sistemi (uguali fino all'ultimo dettaglio!)
4) isolare il programma originale sostituendo tutte le chiamate all'OS con tutte le chiamate alla tua libreria
5) ripetere 3 e 4 testando e bestemmiando fin quando tutto funziona davvero come ti aspetti e gli undocumented behaviour inaspettati smettono di saltare fuori

protip: più questo "subset" è di basso livello, meno bestemmie dovrai tirare. La bravura sta tutta nel trovare i punti in comune tra gli OS

Ovviamente, questo se vuoi portarti dietro anche la versione windows... se la versione win è abbandonata converti tutto a linux e bona.
Derivava proprio da tutta questa serie di passaggi il mio "Uhi uhi..."
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
L'intelligenza artificiale ha reso pi&ug...
L'intelligenza artificiale per lo svilup...
Il sistema di verifica dell'identit&agra...
Ora è ufficiale: Samsung sta per ...
Motorola Edge 70 Fusion: ecco le specifi...
8TB a meno di 170€: il richiestissimo Ha...
Il nuovo MacBook 'low cost' arriver&agra...
Pokémon Rosso Fuoco e Verde Fogli...
Risparmiare con le offerte Amazon: weeke...
Gli Xiaomi 17 arrivano a fine febbraio, ...
48.000 Pa a poco più di 100€: la ...
PC più potente, meno spesa: su Amazon to...
Con 2 acquisti si ottiene il 40% di scon...
Blocco VPN in Spagna durante le partite ...
ECOVACS DEEBOT T30C OMNI GEN2 torna a 34...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:52.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v