Escribo un programa helloworld.exe; depende de a.dll. No tengo el código fuente de a.dll, que es un dll dinámico. ¿Cómo puedo cambiarlo a la biblioteca estática, así que puedo vincularlo en helloworld.exe?Cómo convertir una dll dinámica a lib estática?
Respuesta
Lo sentimos, pero no hay una manera directa de hacerlo. Un archivo DLL es un archivo de formato ejecutable completamente vinculado, donde una biblioteca estática es una colección de archivos de objetos separados recopilados juntos. Con un poco de trabajo, puede convertir una biblioteca estática en una DLL, pero hacer lo contrario no es trivial (por decirlo suavemente).
Como dijo Jerry, no puedes hacerlo directamente. Sin embargo, puede empaquetar su programa en algo así como un archivo RAR autoextraíble que incluye la DLL como parte del EXE único, que automáticamente extrae el EXE y los archivos DLL asociados a una carpeta temporal e inicia el programa principal.
@Billy: +1 una solución, pero útil. –
Estoy de acuerdo con Jerry, y si se trata de un problema de implementación, puede usar Nullsoft Scriptable Install System.
False, es posible hacer esto. Por ejemplo, hay una herramienta llamada dlltolib que puede hacerlo.
Probablemente se refiera a esto: https://github.com/peterdn/dll2lib, ¿verdad? No está claro si eso no solo crea la lib de importación para el DLL en lugar de una biblioteca estática lo que el OP está pidiendo. Del código concluyo que no es la lib estática. –
De hecho, indica claramente en la descripción que solo crea una biblioteca de importación: "Una aplicación de línea de comandos .NET que produce una biblioteca de importación (.lib) desde una biblioteca de enlace dinámico de destino (.dll)". – Joe
@Joe ¿por qué asumes que ese es el software del que estaba hablando y downvote? Una búsqueda rápida en Google le habría mostrado http://www.binary-soft.com/dll2lib/dll2lib.htm que indica en la primera línea "Convertir el archivo DLL en su biblioteca estática equivalente". – chacham15
En Windows, puede obtener el archivo lib para ejecutar su programa si tiene el archivo def correspondiente. Puede usar la ventana del símbolo del sistema de Visual Studio para obtener el archivo lib. La línea de comando es la siguiente: lib /def:XXX.def/máquina: x64 (o x86 para obtener lib 32bit) /out:XXX.lib. Debe asegurarse de que el archivo def y el archivo dll estén en la misma carpeta y que haya cambiado el directorio a la carpeta.
- 1. Convertir archivo lib + header a DLL
- 2. cómo vincular con lib dinámica (.so) y estática libc.a
- 3. Cómo convertir URL dinámica en URL estática
- 4. ¿Cómo puedo convertir un VSTS .lib en un MinGW .a?
- 5. Biblioteca estática (.lib) al proyecto de Python
- 6. C# 4.0: fundición dinámica a estática
- 7. Compatibilidad de * .dll * .a * .lib * .def entre VisualStudio y gcc
- 8. Biblioteca estática y Biblioteca dinámica: Confusión
- 9. ¿Cómo compilar Haskell a una biblioteca estática?
- 10. ¿Cómo puedo gestionar la construcción de proyectos de biblioteca que produzcan tanto una lib estática como una dll?
- 11. .h, .dll y .lib confusion
- 12. ¿Cómo puedo convertir una aplicación de consola a .dll?
- 13. ¿Qué hay dentro del archivo .lib de la biblioteca estática, biblioteca dinámica enlazada estáticamente y biblioteca dinámica vinculada dinámicamente?
- 14. Símbolo duplicado: Incluir la lib estática en B estática, también incluir lib A y B en el Proyecto XCode
- 15. De la biblioteca estática MinGW (.a) a la biblioteca estática de Visual Studio (.lib)
- 16. ¿Convertir una biblioteca estática a una biblioteca compartida?
- 17. Usar DLL en C sin lib
- 18. C++ Project compila como lib estática, falla (error del enlazador) como lib dinámico. ¿por qué?
- 19. Localización de cadenas en lib estática
- 20. Alterar la ruta de búsqueda DLL para DLL estática
- 21. .lib y .dll Compatibilidad con versiones anteriores
- 22. .lib error cuando estoy usando un dll?
- 23. Importación dinámica de una clase de C++ desde una DLL
- 24. ¿Cómo pasar una matriz dinámica de cadena a una biblioteca dll (DLL y cliente escritos en d7) sin ShareMem Unit?
- 25. De la escritura estática a la escritura dinámica
- 26. Convertir 32 bit dll a 64 bit dll
- 27. Eliminando una llamada al método desde dentro de una lib estática (.a) sin recompilar
- 28. ¿Cómo funciona .h, .lib y .dll trabaja en conjunto
- 29. Compilación de FreeType a DLL (a diferencia de la biblioteca estática)
- 30. Convirtiendo biblioteca de enlaces estáticos a dll dinámico
+1 para la única respuesta correcta a la pregunta original del OP. (Mi respuesta es solo una solución) –
te refieres a una respuesta incorrecta ... – chacham15
@chacham: He descargado y probado dlltolib. Al menos en base a mi prueba, diría que la respuesta que di se mantiene correcta. Supongo que dlltolib puede funcionar para algunos archivos DLL en algunas circunstancias, pero ciertamente * no * parece estar cerca de ser perfecto o universal. –