Newsgroup: it.comp.lang.c++
Titolo: Borland 5.5 - Libreria non trovata tramite file ilink32.cfg

Ciao a tutti,
chiedo scusa se la domanda non è proprio IT ma sui
vari NG borland, compreso quello dedicato ai command
line tools, non mi è riuscito a trovare quel che serve
a me.
Dunque, creo una libreria mylib.lib e la metto in una
certa directory, diciamo j:\Documenti\progs dopodiché
modifico il mio file ilink32.cfg come segue:
-L"f:\Librerie\f2c\lib"
-L"j:\_root\Documenti\progs"
-L"f:\Programmi\_minst\Borland\BCC55\lib"
compilo un programma diciamo pr.cpp in cui chiamo una
funzione nella libreria, con la linea di comando:
bcc32 -c pr
dopodiché chiamo:
ilink32 @ln.lnk
in cui il file ln.lnk è così fatto:
/Tpe /ap /c /Gn c0x32 +
pr.obj , pr , map , import32 cw32
e mi dà il classico "unresolved external". Se tento la
via canonica di specificare la libreria tramite linea
di comando allora funziona, e funziona pure se
modifico il file come segue
/Tpe /ap /c /Gn /S:16384 c0x32 +
pr.obj , pr , map , import32 mylib cw32
Ma il problema è che ho tante librerie "personali" in
tanti posti diversi che spesso cambiano. Sui vari NG
dedicati ai tools borland tutte le risposte che ho
trovato riguardano la specifica delle librerie ovunque
(sulla linea di comando e nel file di risposta) ma non
nel file .CFG che è la cosa che mi occorrerebbe. Su
linea di comando o nel file di risposta tutto
funziona, allora perché no col file .CFG?
Ovviamente ho tentato tutte le combinazioni di ordine
di specifica dei paths nel file .CFG così come varie
combinazioni con e senza virgolette nella stringa del
path. Forse non ho tentato tutto ma quel che ho fatto
non ha mai funzionato.
Qualcuno può dirmi dove sbaglio?
Grazie infinite e scusate il parziale OT ma non so
dove sbattere la testa :(((
Apx.

 pr.obj , pr , map , import32 cw32
Mi spieghi dove stai dicendo al linker come caspita si chiama la tua
libreria? Pensi che se lo inventi? Sì, può inventarselo (hint hint:se usi il
VC++ puoi usare #pragma comment(lib, "nomelibreria"). E' probabile che altri
compilatori per Windows lo supportino).
--- bye

 
Naturalmente non penso che possa inventarselo. Mi
sembra che gli esempi dell'help oltre che la sintassi
dell'opzione facciano riferimento al path dove si
trova la libreria. Immagino che il linker prenda quel
path e si acchiappi tutto quel che finisce con .LIB e
poi se la veda lui. Ho provato per scrupolo a usare il
nome della libreria con tanto di suo path, ovviamente,
ma anche stavolta protesta e un po' me lo aspettavo.
Del resto quando invoco bcc32 non vuole sapere tutti i
nomi delle librerie: o ha il path (e allora non
capisco perché non accetti gli altri dall'utente)
oppure ha codificati i nomi anche se mi pare una
strategia stupida per eventuali cambiamenti tra una
versione e l'altra.
Hai ragione per l'OT e me ne scuso. Ti ringrazio
comunque della risposta.
Ciao,
Apx.
--------- copy & paste da finestra dell'help
This option lets you specify the directories the
linker will search if there is no explicit path given
for an .LIB module in the compile/link statement.
The Specify Library Search Path uses the following
command-line syntax:
/L<PathSpec>[;<PathSpec>][...]
The linker uses the specified library search path(s)
if there is no explicit path given for the .LIB file
and the linker cannot find the library file in the
current directory. For example, the command
ILINK32 /Lc:\mylibs;.\libs splash
.\common\logo,,,utils logolib
directs the linker to first search the current
directory for SPLASH.LIB. If it is not found in he
current directory, the linker then searches for the
file in the C:\MYLIBS directory, and then in the
.\LIBs directory. However, notice that the linker does
not use the library search paths to find the file
LOGO.LIB because an explicit path was given for this file.

 versione e l'altra.
Perchč in un file .obj tu puoi iniettarci le librerie che usa (vedi il
comando che ti ho dato), e il bcc32 infatti ci inietta i nomi delle librerie
"di sistema", e in ogni caso non sarebbe il bcc32 a dover pensare alle
librerie, ma l'ilink32.
No, lui non si prende tutte le lib che trova e prova a vedere se servono.
Vedi dove hai scritto  "import32 cw32"? Quelle sono librerie (al 99%). Tu
quindi lě ci scrivi "spaziomialibreriasenzaestensione", e poi gli dai il
path con l'opzione che hai usato tu (credo), cosě sa dove pescarsi le
librerie.
La sintassi dell'Ilink32 infatti č ILINK32 objfiles, exefile, mapfile,
libfiles, deffile, resfiles
Capito?
--- bye

 
SSSSSIIIIIIIII' ha funzionato, e ti ringrazio della
spiegazione!!!!
Ciao
Apx.