2012-02-12 14 views
6

Ho alcuni file .lib, ma non ho accesso ai file di intestazione .h. Significa che i file .lib sono inutili ora?I file .lib sono inutili senza i file di intestazione?

In caso contrario, come posso utilizzarli di nuovo?

Ho provato a utilizzare questa riga nel mio programma, ma non sembra essere stata compilata nell'eseguibile finale (verificata con CFF Explorer).

#pragma comment(lib, "SomeLibFile.lib") 

Quindi, l'unico modo per collegare il file .lib è attraverso l'uso dei suoi file di intestazione? Esistono strumenti per ripristinare un file di intestazione per il file .lib?

+4

Perché non vai nella pagina di download della libreria e riscarri le intestazioni? – Lefteris

+0

Ho usato uno strumento per generare i file. Esce in .dll e .lib ecc. Non ho problemi ad usare il dll, ma sono curioso di sapere perché ha prodotto un .lib con nessun file .h. – user25101622

+1

Come usi la dll? Ci deve essere un colpo di testa, giusto? A meno che non stiate facendo .NET. Perché sei così vago? Diteci il nome dello strumento. –

risposta

5

Dipende da come è stato scritto il codice file .lib. Se è un c api, questo è ciò che la parola chiave extern è per. È possibile trovare una sorta di programma che mostra le esportazioni della funzione. Quindi potresti dichiararli come extern nel tuo codice. Il problema sarebbero le tue strutture dati però.

In ogni caso, non è tecnicamente necessario avere i file di intestazione, è possibile definire le strutture di dati da soli e dichiarare le funzioni con la parola chiave extern.

Si potrebbe semplicemente collegare il .lib quando si esegue il linker alla fine del processo di compilazione.

+2

non fraintendetemi, il modo ottimale per farlo è quello di trovare le intestazioni. –

2

È possibile collegare un file .lib passandolo sulla riga di comando del linker, non è necessario #pragma.

Ovviamente, l'utilizzo di qualsiasi cosa al suo interno richiede la conoscenza delle convenzioni di chiamata, delle firme delle funzioni, del layout dei tipi definiti dall'utente, ecc. Tutto questo di solito è fornito da un file di intestazione, ma potrebbe anche essere trovato nella documentazione.

In ogni caso, i file di intestazione non sono generati dal compilatore (bene MIDL e CORBA usano i file di intestazione generati dalla macchina, ma tutte le informazioni nell'intestazione sono ancora inserite manualmente nei file .idl). E a meno che la tua tecnologia non usi una libreria dei tipi, le informazioni necessarie non vengono mantenute con una DLL.

Problemi correlati