Tengo una pregunta general sobre cómo se supone que se utilizarán .dll/.libs. Estoy creando un .dll para ser usado en mi proyecto, sin embargo, noté que cuando voy a compilar necesito vincular estáticamente el archivo .lib asociado con el .dll para que el proyecto se compile (de lo contrario, aparece el error de enlace "fatal"). error LNK1107: archivo no válido o dañado: no se puede leer a 0x300 "). Luego, cuando vaya a redistrobutear mi proyecto y luego lo actualice en el futuro, ¿tendré que enviar un nuevo .exe y un nuevo .dll en lugar de un nuevo .dll? Si ese es el caso, ¿por qué molestarse en usar .dll?Lib y enlace DLL a un error exe "no se puede leer en 0x300"
Respuesta
El .lib contiene stubs para las funciones, etc., que exporta el DLL. Vincula el .lib en su EXE y ahora su EXE sabe cómo llamar a las funciones. Pero, por supuesto, no hay función allí; las llamadas no van a ninguna parte. En el momento de la carga, cuando el sistema operativo carga su EXE, también carga su DLL, y luego remueve el EXE: cuando el EXE llama al resguardo, el cargador lo reemplaza con una llamada a la función real en el DLL.
Normalmente no es necesario enviar el .lib a sus clientes. Sin embargo, si sus clientes desean escribir sus propios EXE que usen su DLL, entonces deberán enviarles .lib para que puedan vincular su EXE con este.
Error de vinculador LNK1107 significa que ha intentado vincular a la DLL en lugar de a la .lib. Eso siempre es incorrecto, ya que, por definición, una DLL está vinculada dinámicamente en tiempo de ejecución, en lugar de estáticamente en tiempo de compilación.
- 1. .lib error cuando estoy usando un dll?
- 2. Integrado a * .exe en un dll
- 3. Error: No se puede encontrar el módulo './lib/socket.io'
- 4. Embalaje un exe + DLL en un ejecutable (no .NET)
- 5. ¿Puede un enlace EXE de 64 bits contra archivos DLL de 32 bits?
- 6. .h, .dll y .lib confusion
- 7. Visual C++ - DLL de complemento de enlace contra EXE?
- 8. Error de enlace 2001 al vincular a User32.dll
- 9. Diferencia entre .dll y .exe?
- 10. .lib y .dll Compatibilidad con versiones anteriores
- 11. No se puede acceder a jarfile ./lib/proguardgui.jar
- 12. ¿Cómo se puede combinar un archivo DLL de Windows C++ en un exe de aplicación C#?
- 13. No se puede acceder jarfile lib \ archquery.jar
- 14. Compatibilidad de * .dll * .a * .lib * .def entre VisualStudio y gcc
- 15. No se puede iniciar Eclipse - no se puede abrir \ Java \ jre6 \ lib \ i386 \ jvm.cfg
- 16. Configuración compartida entre un .exe y un .dll
- 17. No se puede registrar DLL usando WiX
- 18. Cómo descompilar un exe o un dll en el ensamblado
- 19. error de mysql: ERROR 1018 (HY000): No se puede leer el directorio de '.' (Error: 13)
- 20. ¿Cómo creo un archivo .lib y un archivo .exe en Visual C++?
- 21. Error de prueba de unidad de Microsoft, no se puede cargar DLL para probar
- 22. Convertir archivo lib + header a DLL
- 23. No se puede utilizar [] para leer
- 24. Al compilar un archivo DLL, ¿el archivo LIB generado contiene el nombre de la DLL?
- 25. ¿Cómo se construye un .exe de depuración (MSVCRTD.lib) contra una versión lib liberada (MSVCRT.lib)?
- 26. ¿Por qué instalar vcredist_x86.exe no soluciona el error de SideBySide cuando desarrollo un EXE en una máquina y lo ejecuto en otro?
- 27. ¿Cómo actualizar un dll C++ sin necesidad de volver a vincular el exe con el archivo lib?
- 28. Mi código dll funciona desde un archivo exe, pero no se carga desde Java loadLibrary
- 29. Error SQL Server Compact: no se puede cargar DLL 'sqlceme35.dll'. El módulo especificado no se pudo encontrar
- 30. Error de aplicación - debug exe no se ejecutará
Estoy intentando lo que ha sugerido. Mi problema es que cuando estoy construyendo en modo de depuración no se genera ningún archivo lib. Solo se genera el archivo dll. ¿Cómo puedo generar el archivo lib en la versión de depuración? –
Su comentario parece sugerir que obtiene un archivo lib en la compilación de lanzamiento, pero no en la compilación de depuración. ¿Está bien? Si es así, asegúrese de haber establecido las mismas opciones de enlazador en ambas compilaciones (excepto, por supuesto, para aquellas que necesitan ser diferentes entre versiones y depuración). –
El enlazador generará la biblioteca de importación automáticamente si su archivo DLL contiene alguna Funciona con el atributo __declspec (dllexport), o si exporta funciones explícitamente con un archivo DEF. Tal vez su compilador __declspec (dllexport) está excluido porque está rodeado por #ifndef (_DEBUG) o algo así? –