Vai al contenuto

Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Foto

Domanda: utilizzo dei comandi "-L" e LIBRARY_PATH


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 16 risposta/e

#1
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Bene ragazzi, ho un problema con i comandi in oggetto. In pratica studiavo come il linker recupera i vari pezzi qua e la per generare l'eseguibile e fino all' header ok, ma con le librerie non va proprio. Per gli header ho utilizzato i comandi "-I" e C_INCLUDE_PATH e tutto funziona correttamente sia in un modo che nell'altro, invece non vanno i comandi "-L" e LIBRARY_PATH: mi da sempre l'errore che non trova le librerie che io gli dico di includere al momento della creazione dell'eseguibile.

Per esempio i comandi

gcc -Wall main.c -o main.exe -I C:\...\
e
set C_INCLUDE_PATH=C:\...\
gcc -Wall main.c -o main.exe

funzionano correttamente, mentre una scrittura del tipo
gcc -Wall main.c -o main.exe funzioni.lib -I C:\...\ -L C:\...\
provoca un errore dovuto al fatto che non trova funzioni.lib anche se è inserito nel percorso specificato dopo "-L".

A cosa può essere dovuto tale errore? Mi affido a voi....



#2
HDM

HDM

    Advanced Member

  • Utente
  • StellaStellaStella
  • 405 Messaggi:
Se non ricordo male le librerie non vengono salvate in file .lib ma in file .a.
Quindi dovresti fare una cosa di questo tipo
gcc -Wall squadre.c -L./lib -lsquadre
Dove -lsquadre tenta di collegare libsquadre.a (viene posto in automatico un prefisso lib al file quando si usa quel comando) con -L invece si aggiunge un percorso dove il compilatore va a cercare la libreria libsquadre.a
Immagine inviata

#3
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Le librerie che sto usando sono realizzate da me: ho realizzato sia delle librerie statiche(.lib o .a) che delle librerie dinamiche(.dll) e funzionano correttamente perchè se le metto nella stessa cartella del gcc e utilizzo il seguente comando

gcc -Wall main.c -o main.exe lib1.lib

l'eseguibile viene creato senza problemi, ora come devo fare se lib1.lib non la metto nella cartella del gcc (o anche tra le librerie predefinite nella cartella C:\Dev-C++\Lib\)?

#4
HDM

HDM

    Advanced Member

  • Utente
  • StellaStellaStella
  • 405 Messaggi:
Prova a usare il comando -l mettendoci l'intero percorso sempre preceduto dal comando -L con la directory dove si trovano le librerie.
Immagine inviata

#5
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:

Prova a usare il comando -l mettendoci l'intero percorso sempre preceduto dal comando -L con la directory dove si trovano le librerie.


Allora supponendo si avere una libreria che si chiama libst.lib tu dici di utilizzare il seguente comando?

gcc -Wall -L C:\...\ main.c -o main.exe -ls

#6
HDM

HDM

    Advanced Member

  • Utente
  • StellaStellaStella
  • 405 Messaggi:
gcc -Wall -L C:\...\ main.c -o main.exe -lst

Si, prova ad usare questo.
Altrimenti se non va prova a mettere invece di st tutto il percorso e tutto il nome del file completo "C:\...\libst.lib"
Immagine inviata

#7
Lev1athan

Lev1athan

    Advanced Member

  • Utente
  • StellaStellaStella
  • 57 Messaggi:
Con questa sintassi gcc -Wall main.c -L percorso -lst -o nome_eseguibile hai lo stesso problema?

Ho semplicemente invertito l'opzione -lst spostandolo prima dell'opzione -o.

Se è possibile, potresti postare uno zip contenente tutti i file necessari al programma?
  ▲  
▲ ▲

#8
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Ragazzi ho provato in tutti i modi ma niente da fare, comunque, come chiesto, allego i files sui quali sto lavorando. Nel file zip includo anche le librerie da me realizzate .lib e .dll (ho provato anche con le librerie .a che non sono incluse ma che potete creare anche voi a partire dai file sorgenti).

#9
Lev1athan

Lev1athan

    Advanced Member

  • Utente
  • StellaStellaStella
  • 57 Messaggi:
Potresti postarle in .zip
  ▲  
▲ ▲

#10
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:

Potresti postarle in .zip


Mi dispiace, ma uso solo WinAce come programma per zippare i files, comunque dovresti essere in grado di aprirlo sia con WinZip che con WinRar... almeno ricordo che così era quando avevo tutti e tre i programmi.

#11
HDM

HDM

    Advanced Member

  • Utente
  • StellaStellaStella
  • 405 Messaggi:
Ho ricostruito la libreria in .a e la cosa funziona. Ho messo gli header nella cartella include e la libreria creata ed i file oggetto nella cartella lib, ed usando il comando in questo modo la cosa funziona!

[b]
gcc -Wall stack_main.c -L./lib -lpers -I./include -o squadre[/b]

ti allego il file così provi anche tu, il tuo potrebbe essere o un errore nella creazione delle librerie oppure qualche altra cosa dovuta al fatto che tenti di richiamare due librerie e non una sola... non so.
Immagine inviata

#12
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
Funziona anche a me se metto le librerie in lib (anche se metto le .lib o .dll) e gli headers in include, ma il problema è che in questo modo non si estendono i percorsi di ricerca, visto che quelli sono già dei percorsi predefiniti. Il mio scopo è quello di caricare le librerie da un percorso diverso (cosa che per altro con gli headers, vi ripeto, funziona) estendendo i percorsi di ricerca...

#13
HDM

HDM

    Advanced Member

  • Utente
  • StellaStellaStella
  • 405 Messaggi:
Ma a dire il vero in questo modo li estendi e come i percorsi di ricerca, le cartelle lib e include della tua cartella di lavoro non sono per nulla percorsi di ricerca predefiniti. Semmai lo saranno quelli delle cartelle lib e include presenti tra i file di DC++ se non sbaglio.
Immagine inviata

#14
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:

Ma a dire il vero in questo modo li estendi e come i percorsi di ricerca, le cartelle lib e include della tua cartella di lavoro non sono per nulla percorsi di ricerca predefiniti. Semmai lo saranno quelli delle cartelle lib e include presenti tra i file di DC++ se non sbaglio.


Ok, avevo capito che intendevi le cartelle lib ed include del Dev. E comunque ho provato come mi hai detto solo che con qualche modifica... in particolare non ho creato nessuna nuova cartella "lib" o "include" anche perchè funzionando per gli headers non capivo perchè non potesse funzionare anche per le librerie, poi ho utilizzato la seguente sintassi:
gcc -Wall -L C:\...\ stack_main.c -o mainst libpers.a libst.a
in modo da poter includere più librerie (infatti sembra che il comando "-lNOME" permetta di includere una sola libreria per volta). Infine ho notato che il tutto funziona solo con le librerie .a, e ciò mi sembra strano perchè se metto le librerie .lib e .dll nella cartella del gcc senza specificare alcun percorso l'eseguibile viene comunque creato correttamente, è come se fosse possibile estendere i percorsi per le librerie .a e non per quelle .lib e .dll...

#15
HDM

HDM

    Advanced Member

  • Utente
  • StellaStellaStella
  • 405 Messaggi:
Forse bisogna utilizzare qualche altro comando per le librerie .dll e .lib se dici che funziona solo con quelle .a :uhmidea:
però sinceramente al momento non so che comando si possa utilizzare o se c'è semplicemente qualche errore in come tentiamo di richiamarle noi, al corso sono state trattate poco e niente le librerie :P
Dovresti vedere se ti dicono qualcosa quelle slide "Introduzione al GCC" che consigliò Pergen. Tra i download della sezione ci sono!
Immagine inviata

#16
eferre

eferre

    Advanced Member

  • Utente
  • StellaStellaStella
  • 1502 Messaggi:
In realtà quelle slides sono tratte da un libro che il prof ci ha detto di prendere dal web e studiare... e quindi ho visto, ma niente... vorrà dire che chiederò a lui, comunque sia grazie HDM, troppo gentile.

Posterò eventuali soluzioni al problema in questo topic. :ciao:

#17
HDM

HDM

    Advanced Member

  • Utente
  • StellaStellaStella
  • 405 Messaggi:
Di niente, facci sapere se ti da una qualche soluzione, così impariamo qualcosa anche noi :P
Immagine inviata




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi