Ho una domanda generale su come si supponga di utilizzare .dll/.libs. Sto creando un file .dll da utilizzare per il mio progetto, tuttavia, ho notato che quando vado a compilare ho bisogno di collegare staticamente il .lib associato al file .dll per la compilazione del progetto (altrimenti c'è l'errore di collegamento "fatale" errore LNK1107: file non valido o danneggiato: impossibile leggere su 0x300 "). Quindi più tardi, quando andrò a redistrobute il mio progetto, poi lo aggiornerò in futuro, avrò bisogno di spedire un nuovo .exe e una nuova .dll piuttosto che solo una nuova .dll? Se questo è il caso, allora perché preoccuparsi di usare .dll?Lib e DLL che collegano a un errore exe "non è possibile leggere a 0x300"
risposta
Il .lib contiene stub per le funzioni ecc. Che vengono esportati dalla DLL. Colleghi il .lib nel tuo EXE e ora il tuo EXE sa come chiamare le funzioni. Ma ovviamente non c'è alcuna funzione lì - le chiamate non vanno da nessuna parte. Al momento del caricamento, quando il sistema operativo carica il file EXE, carica anche la DLL e quindi applica l'EXE - dove l'EXE chiama nello stub, il caricatore lo sostituisce con una chiamata nella funzione reale nella DLL.
Normalmente non è necessario spedire il .lib ai propri clienti. Tuttavia, se i tuoi clienti desiderano scrivere i propri EXE che usano la tua DLL, dovrai inviare loro il .lib in modo che possano collegare il loro EXE a esso.
Errore linker LNK1107 significa che si è tentato il collegamento alla DLL anziché a .lib. È sempre sbagliato, perché per definizione una DLL è collegata dinamicamente al runtime, piuttosto che staticamente al momento della compilazione.
- 1. Incorporato a * .exe in una DLL
- 2. È possibile unire una DLL in un EXE .NET?
- 3. Compatibilità * .dll * .a * lib * .def tra VisualStudio e gcc
- 4. File DLL e LIB
- 5. Un collegamento EXE a 64 bit contro DLL a 32 bit?
- 6. equivalente a rundll32.exe per DLL a 64 bit
- 7. Compilazione di un codice di IronPython a EXE o DLL
- 8. File DLL e LIB: cosa e perché?
- 9. .lib e .dll Compatibilità con versioni precedenti
- 10. Come posso creare sia un file .lib che un file .exe in Visual C++?
- 11. Come faccio a far funzionare PyScripter? Dice che non è possibile trovare python26.dll
- 12. py2exe non riesce a creare EXE a causa della DLL mancante quando viene importato opencv
- 13. che cosa è l'uso di .exp e quale è la differenza tra .lib e .dll
- 14. Come sono i file di intestazione (.h), file di libreria (.lib) e DLL (.dll) relativi a
- 15. Configurazione condivisa tra un file .exe e un file .dll
- 16. Qual è la differenza tra i file .lib e .a?
- 17. Perché non è possibile che un progetto .net 4.0 faccia riferimento a un assembly 4.5?
- 18. È possibile chiamare una funzione non esportata che risiede in un exe?
- 19. script fsx che fa riferimento a una dll che fa riferimento a molte dll
- 20. Eclipse non può collegarsi a kernel32.lib
- 21. Come rilevare che un determinato file PE (EXE o DLL) è a 64 bit o 32 bit
- 22. lib non specificato e errore nel loadNamespace
- 23. .exe dà errore MSVCP120.dll mancante per Win7x64
- 24. Query WMI per leggere "Microsoft-Windows-AppLocker/EXE e DLL" C#
- 25. Non è stato possibile aggiungere un riferimento ". Un insieme deve avere una dll o estensione exe per essere riferimento
- 26. Uscita Force Scons (exe, obj, lib & dll) in specifica directory di build
- 27. Errore strano linker che collega a opencv ... "LNK1107: file non valido o corrotto: impossibile leggere a 0x2E8"
- 28. Creare exe con Pyinstaller ERRORE: Assemblea amd64_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none non trovato
- 29. Step into dll non è possibile (PPB disponibili)
- 30. Due plug-in che collegano a DLL con nome identico o oggetto libreria condivisa (così) con diversa implementazione (codice)
Sto provando quello che mi hai suggerito. Il mio problema è che quando sto costruendo in modalità di debug non viene generato alcun file lib. Viene generato solo il file dll. come posso generare il file lib nella versione di debug. –
Il tuo commento sembra suggerire di ottenere un file lib nella build di rilascio, ma non nella build di debug. È giusto? In tal caso, assicurati di aver impostato le stesse opzioni linker in entrambi i build (tranne, ovviamente, per quelli che devono essere diversi tra release ed debug.) –
Generalmente il linker genera automaticamente la libreria di importazione se la tua DLL contiene funziona con l'attributo __declspec (dllexport) o se si esportano le funzioni esplicitamente con un file DEF. Forse il tuo __declspec (dllexport) è escluso dal compilatore perché è circondato da #ifndef (_DEBUG) o qualcosa del genere? –