Newsgroup: it.comp.programmare.win32
Titolo: I dubbi di un vecchio programmatore...

Per ragioni didattiche (e perchè sono un vecchio programmatore...)
sto cercando di utilizzate C++ Builder 3.0 a linea di comando,
separando la fase di compilazione da quella di linking
Dunque come d'uso setto i path della finestre dos del mio windows98
(sic!) nella
seguente maniera:
SET
PATH=c:\util;D:\CBUILDER3\bin;D:\CBUILDER3\lib;d:\Cbuilder3\include;D:\Cbuilder3\lib\obj;d:\Cbuilder3\example\wintools
(essendo il cbuilder installato in D:\CBuilder3\)
poi mi metto in una mia directory di C:\ a finestra dos
lancio un BAT che setta i path
(verifico x sicurezza che i path siano ok)
e preparo il mio file (il mitico Hello, world) dal nome b.c
Al comando >bcc32 b.c
il compilatore compila, linka e genera il .obj e il .exe che funzione,
eventualmente con anche le mappe di link corrette
Allora provo a separare le due fasi:
1) al comando >bcc32 -c b.c
il compilatore compila e genera il .obj
2.1) al comando >tlink32 b.obj il compilatore non trova il riferimento
esterno per _printf e non trova l'entry_point del programma (quindi
non riconosce la funzione _main)
2.2) allora provo a utilizzare ilink32 e, mannaggia alla Borland, non
riesce a risolvere __setargv__ e __turboFloat__ , dunque messaggi di
errore diversi
Nota bene: ho anche provato a disporre nella directori i files
bcc32.cfg e ilink32.cfg per settare "di forza" l'include path e il lib
path, ma niente da fare...
Inoltre l'help dice che bcc32 usa, quando linka, le librerie di defult
- c0w32.obj
- cw32.lib
- import32.lib
che stanno tutte in D:\CBuilder3\LIB
Allora ho anche provato a dichiararle esplicitamente nel comando di
link con
tlink32 -Ld:\CBuilder3\LIB b.obj,b.map,,,, ma come sopra.
TIP: provo a fare lo stesso con il compilatore gratuito 5.5 che si
scarica dalla Borland, tutto sempra andare bene ma quando lancio
l'eseguibile ho un errore di protezione.... forse era meglio se facevo
l'idraulico...
Grazie in anticipo e buon FFFFF82E ooopps, c'è  un problema di
overflow nel complemento a 2, volevo dire 2001...

 ilink32 b c0x32,,,cw32 import32
... E vedrai che tutto funziona ;-)
PS. Se vuoi creare applicativi piccolissimi, puoi evitare di linkare la
libreria standard e quindi utilizzare esclusivamente le API messe a
disposizione dal sistema operativo (con cui si possono fare le stesse cose,
rendendo però il codice estremamente non-portabile). In questo caso devi
escludere dal link anche il modulo di startup (c0x32.obj) e definire tu
stesso, nel tuo programma, le funzioni _turboFloat() e _setargv__().
Quest'ultima diventerà l'entry-point del programma, per cui dovrai trattarla
come se fosse una main().
Tanti saluti,
    Marco

separando la fase di compilazione da quella di linking
Siamo entrati ufficialmente nel terzo millennio ormai da 3 giorni :)
Luc.

Sei stato gentilissimo... solo una domanda: c'è scritto  da qualche
parte o è l'esperienza fatta su compilatori vecchi?


Io non l'ho trovato scritto da nessuna parte. Tempo fa avevo la necessità di
eseguire compilazione e link nel modo più "controllato" possibile, quindi ho
dovuto scoprire quali sono i moduli che vengono linkati di default e lo
scopo per cui vengono inclusi nel link. Qualcosa ho letto dalla guida in
linea del C++ Builder 4, ma il resto l'ho capito solo facendo esperimenti e
"dump" binari delle librerie...
Ciao,
    Marco

"dump" binari delle librerie...
è proprio questo il punto... da sempre ho l'impressione che gli
ambienti molto integrati rendano poco riproducibile il processo di
costruzione del software, o, in altre parole, si fa fatica a capire
cosa succede davvero... e nell'industria, ad esempio, questa non è una
bella cosa..
Io lo uso così per ragioni didattiche, è faticoso spiegare il proceso
di compilazione linking loading quano l'IDE fa tutto da solo...
Forse nel terzo millennio sarebbe ora che certi strumenti fossero un
po' più professionali...
Ciao
Fabio