Quote:
Originariamente inviato da Black imp
innanzi tutto grazie mille per la pazienza.
premessa: ho ben presente come si linkano e utilizzano librerie dinamiche e statiche sotto linux. trovo molto più difficile capirlo sotto windows.
|
dopo aver avuto esperienze in merito in entrambi gli ambienti in tutta sincerità io avrei detto il contrario
Quote:
meglio perchè è molto veloce e pratico. solo che ho letto di alcuni bug che sono stati sanati nel .net ... non chiedermi dove perchè sto raccattando info da forum, tutorial e materiale vario tutti i giorni. quindi dici che non c'è bisogno che ne usi uno più recente?
|
emmammamia, che saranno mai sti bug... la versione 6 va benissimo, poi dipende anche da cosa devi fare esattamente: per esempio per un programma basato su dotnet io userei appunto una versione più recente, sicuramente la 2005 che è aggratise, ma per qualsiasi programma Win32 o MFC alla versione 2005 non ci penso neanche, vado sulla 6 senza pensarci due volte.
Quote:
è già impostato di default nel progetto: comunque Project, Properties, Link e c'è tutto l'elenco delle lib che deve linkare.
|
appunto, quelle non sono librerie statiche
Quote:
se gli aggiungo le 3 necessarie - gl glu e glaux - va tutto bene ma mi sembra che le lib siano statiche...
|
assolutamente no: a parte che "gl.lib" e "glu.lib" non esistono da nessuna parte (verifica tu stesso), ma poi quelle non sono librerie statiche, sono files lib che contengono informazioni su come e dove il compilatore deve andare a cercare i simboli importati; nel caso specifico, opengl32.lib contine informazioni che dicono al compilatore che tra i simboli importati nel progetto, le funzioni glXxx e gluXxx vanno importate dalle relative DLL; poi il compilatore in fase di compilazione le DLL di OpenGL non le guarda neanche: tutte le informazioni di importazione risiedono nel lib e il compilatore altro non fa che riscriverle in un altro modo nell'immagine eseguibile finale (infatti la compilazione se non erro può avvenire anche senza che sul computer locale siano presenti le immagini da cui si importano simboli, cosa che su Linux, sempre se non erro, non è possibile); l'immagine eseguibile finale quindi conterrà una tabella con vari nomi di DLL e altre immagini da cui quell'immagine effettua qualche importazione, e per ognuna di queste immagini conterrà altrettante tabelle con l'elenco dei simboli importati da ognuna. in fase di runtime l'immagine viene letta dal sistema operativo e vengono cercate tutte le immagini da cui essa dipende, cioè da cui essa importa qualche simbolo: se il sistema operativo trova tutte le immagini e con tutti i simboli richiesti bene, le carica e le binda, altrimenti mostra un messaggio di errore e l'immagine non può essere caricata; se l'immagine il cui caricamento fallisce è l'eseguibile che viene usato per creare il processo allora naturalmente il programma non può essere avviato.
Quote:
no effettivamente non ho proprio capito che cosa sono le lib. non sono obj nè dll quindi che cosa sono? dei link alle dll? se sì, io vorrei che rimandassero alle dll fornite con i driver della mia scheda video in modo che utilizzassero le open gl più recenti. le lib che ho aggiunto sono fornite dal compilatore.
|
i lib forniti col compilatore non rimandano certo ai drivers di OpenGL specifici della tua scheda video: rimandano semplicemente ad un'unica DLL (dovrebbe chiamarsi proprio "opengl32.dll": di solito i lib hanno lo stesso nome della DLL che descrivono) situata in C:\Windows\system32 che poi effettua il dispatch delle chiamate che riceve ai drivers della scheda video (caricati nel processo del kernel).
Quote:
[...] e soprattutto se io ho una dll nuda e cruda - o voglio adeguare una lib a una versione più recente della dll - come la costruisco la lib?
|
la lib deve essere necessariamente fornita con la DLL stessa; le lib delle DLL di sistema di Windows (almeno quelle documentate) sono fornite quasi tutte col Visual Studio, o comunque col Platform SDK (che si scarica gratis e che tu, avendo Visual Studio, già hai, anche se in versione un po' vecchia); alcune tipo l'SDK di DirectX vengono col download dell'SDK a parte.
per creare un file lib partendo dalla DLL il modo teorico esiste, ma un programma per farlo che io sappia ancora non esiste; prima degli esami (cioè a inizio gennaio) avevo iniziato a farne uno io stesso dato che penso che sarebbe una cosa utile, ma poi non l'ho continuato appunto a causa degli esami.
Quote:
Questa mi interessa tantissimo perchè le direttive pragma non le conosco.
|
niente da dire, semplicemente da qualche parte scrivi quella riga che ti ho riportato

possibilmente per chiarezza scrivila nello stesso file dove hai messo
Codice:
#include <gl/gl.h>
.
le direttive #pragma per definizione sono semplicemente delle direttive che vengono ignorate nel caso il compilatore non riesca a riconoscerle, quindi servono solo ad inserire nel codice direttive specifiche per il compilatore in uso; #pragma comment è specifica dei compilatori Microsoft-compatibili e serve appunto a linkarsi ad un lib che descrive una qualche DLL.