linker errors - C++ Builder XE7 LME288 Error
linker-errors c++builder (14)
¡Cambiar el idioma IDE de francés a inglés con BDSSetLang.exe solucionó el error LME288 para mí!
De repente, de repente, aparece el error del enlazador LME288.
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ilc: 0x00010000 / 0x08000000
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ild: 0x00010000 / 0x08000000
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ilf: 0x00010000 / 0x0a000000
[ilink32 Warning] Warning: D:/Projects/TrainFever Game Manager/TFGM/Win32/Debug/TFGameManager.ils: 0x0003b000 / 0x08000000
[ilink32 Warning] Warning: unknown heap name : 0x08000000 / 0x08000000
[ilink32 Warning] Warning: Error detected (LME288)
[ilink32 Error] Error: Unable to perform link
No tengo AV instalado y el proyecto ha funcionado bien durante más de un año. Yo he tratado:
- Enlazador incremental deshabilitado / habilitado, no hay diferencia ...
- Eliminando manualmente todos los archivos en / debug, aún no hay cambios ...
- Construcción completa, no hay diferencia ...
- Reinicie la computadora, sin cambios ...
Esto se ha pedido anteriormente here pero no se presentó ninguna explicación o solución real.
¿Qué más puedo hacer para solucionar esto?
EDITAR
Intenté reconstruir un par de otros proyectos que han estado funcionando bien durante años y ahora recibo el error LME288 en todos mis proyectos.
Como Drewski me encontré con el error LME288 después de la actualización a Windows 10 (x64).
El error desapareció al cambiar la configuración de Prevención de ejecución de datos para ilink32.exe
:
- Propiedades del sistema -> Configuración avanzada del sistema -> Rendimiento -> Configuración -> Prevención de ejecución de datos
- Activar DEP para todos los programas y servicios, excepto los que seleccione ->
ilink32.exe
.
Corregido para XE10 y Windows 10 (x64) con Bitdefender IS 2016:
Bitdefender -> Módulos -> Antivirus -> Exclusiones -> Procesos excluidos -> Agregar "... / bin / ilink32.exe" -> Permitir
El reinicio de W10 resolvió este problema en XE5 pero estoy desactivando la construcción incremental
En mi caso, probar todas las otras opciones aquí mencionadas no funcionó en absoluto.
Lo que parece haber hecho el truco fue configurar manualmente la cantidad de memoria virtual, en la Configuración del sistema de mi máquina con Windows 10. Se configuró para ser administrado automáticamente por el Sistema Operativo, pero cambiarlo a un valor manual (incluso cuando el mínimo era menor que lo que se asignó automáticamente, y es lo que realmente se está utilizando) hizo que el enlazador funcionara nuevamente.
En mi caso, el sistema operativo había asignado algo así como 1.600 Mb. Establecí el mínimo en 1,024 y el máximo en 3,072, se reinició, y ahora el enlazador está funcionando bien. La cantidad utilizada dice 1,024 (incluso cuando el valor recomendado dice ~ 1,900).
Encontré una solución que parece funcionar.
Parece tener algo que ver con archivos temporales corruptos. Logré que funcionara de nuevo después de hacer una "Limpieza de disco" en el disco de mi sistema.
He eliminado todos los archivos de la lista (todas las casillas de verificación marcadas) y también el "Limpiar archivos del sistema"
Después de eso pude compilar y enlazar, incluso sin reiniciar. ¡Incluso el enlace incremental comenzó a funcionar de nuevo!
La solución es muy simple: la variable de entorno PATH de Windows excede su límite de 2047 bytes.
Por favor vea mi descripción aquí: http://blog.bitart.at/lme288/ [alemán]
Edit: Mi "solución" solo duró un par de meses. Después de instalar Microsoft Visual Studio los problemas regresaron.
Como se mencionó en otra respuesta: parchar ilink32.exe con
lamarker -M -Filink32.exe
Parece ser la solución correcta.
Simplemente ejecutando XE8 como administrador lo arreglé para mí.
Solucioné esto asegurándome de que la carpeta de instalación de Embarcadero (por ejemplo, C: / Archivos de programa (x86) / Embarcadero) se excluyera de todos los análisis antivirus.
También he tenido este problema con RAD Studio XE8 instalado en Windows 10. Cuando se instaló en Windows 7 (x86), RAD Studio XE8 funcionó correctamente.
Después de actualizar a Windows 10 (x86) me encontré con los temidos errores LME288 del montón desconocido. Al principio no aparecía en Windows 10, pero si instalaba algo, aparecería. Si restaurara la computadora a Windows 7, desaparecería.
Después de una pequeña investigación en la red, encontré la solución. Hay un problema de memoria con ilink32.exe y debe habilitar el espacio de memoria de 3GB en el arranque de la computadora. Esto es lo que hago ahora si este error vuelve a aparecer:
- Ejecute el símbolo del sistema como administrador.
- Escriba (sin comillas) "bcdedit / set IncreaseUserVa 3072"
- Reiniciar la computadora
Después de hacer eso, ilink32 funciona correctamente.
Encontré que después de instalar una versión más nueva de Acronis True Image (2016), el error LME288 regresó. Pero ejecutando la solución bcdedit aquí, ¡solucionó el enlazador RAD Studio XE8!
Tenemos el mismo problema y lo resolvimos al aumentar la memoria virtual para Windows (era muy baja, 800Mo, ahora es aproximadamente 4 Go)
Tengo una solución diferente que espero ayude a alguien que está luchando con esto.
Lo intenté todo y ninguna de las soluciones sugeridas anteriormente funcionó para mí. La limpieza del disco no ayudó. Esto es claramente un error en C ++ Builder que existió durante muchos años, y aún no se ha solucionado incluso en XE8 a partir de 2015.
Por suerte, tenía otra computadora con entorno de trabajo, donde se compilaba el mismo proyecto. Copié todos los archivos (* .exe, * .obj, etc.) del directorio de salida (Win32 / Debug) desde esa computadora a la que tenía el problema, y eso mágicamente configuró C ++ Builder directamente; todas las compilaciones luego empezaron a funcionar.
Windows 10 (x64), Rad Studio XE Berlin (enlace incremental habilitado).
Solucioné el problema excluyendo " C: / Archivos de programa (x86) / Embarcadero / bin " de los análisis antivirus de Windows Defender.
Nota: Con la versión 10.2 Tokyo de C ++ Builder en abril de 2017, Embarcadero actualizó el vinculador, aparentemente resolviendo este problema (no lo he probado): "El vinculador ahora tiene gran capacidad de direcciones y puede abordar hasta 4GB en un 64- sistema de bits, el doble de la cantidad anterior. (Algunos clientes piratearon el enlazador para ser LAE [sic] en el pasado al alternar el bit en el encabezado de PE; dado que el código no estaba escrito para ser consciente de LAE, este hack impidió la vinculación y el enlace incrementales a veces otras funciones no funcionan correctamente) " https://community.embarcadero.com/blogs/entry/what-s-new-in-c-builder-10-2-part-1-the-linker
Sin embargo, el 24 de mayo de 2017, Ashleigh Quick informó que 10.2 el enlazador de Tokio aún no resuelve el problema: https://quality.embarcadero.com/browse/RSP-12869
Pero aún hay esperanzas: a partir de 10.2 Tokio, tiene algunas opciones nuevas para controlar LARGEADDRESSAWARE y los tamaños de pila del enlazador. Dieter Woellner https://quality.embarcadero.com/browse/RSP-12869 que, temporalmente, configuró C ++ - Linker | Avanzado | La entrada de Opciones avanzadas a "-GF: LARGEADDRESSAWARE" eliminó el problema. Pero el problema volvió, y descubrió que si configuraba el tamaño de TDS en un valor inferior a 0x08000000, evitaría el error / bloqueo al vincular ... por ahora.
=====================================
Soy uno de esos clientes que hackearon el enlazador para ser LAA, interfiriendo así con el enlace incremental (que no necesito) y resolviendo mi problema. Si tiene la intención de seguir utilizando enlazadores en las versiones 10.1 o anteriores, y no necesita enlaces incrementales, siga leyendo.
=====================================
/LARGEADDRESSAWARE
el problema configurando el /LARGEADDRESSAWARE
en ilink32.exe
. La solución original provino de Hiroyuki Shimada, usando editbin
, y publicada en http://qc.embarcadero.com/wc/qcmain.aspx?d=134775 el 12/01/2016. También lo aplicó a bcc32.exe
; Yo no necesitaba
Como servicio público, he publicado mis versiones de ilink32.exe parcheadas aquí:
- RAD Studio 10 Seattle: https://s3.amazonaws.com/public-mfay/ilink32.exe
- RAD Studio 10.1 Berlín: https://s3.amazonaws.com/public-mfay/ilink32-10.1.exe
Para usar cualquiera, cambie el nombre de ilink32.exe
en el directorio de binarios de RAD Studio (por ejemplo, C:/Program Files (x86)/Embarcadero/Studio/17.0/bin
para RAD Studio Seattle, o .../18.0/bin
para Berlín), y copia el mío en su lugar, cambiándolo de nombre a ilink32.exe
.
[Nota: estos enlazadores / LAA resuelven el problema para muchos, pero no para todos los usuarios; vea la publicación de @Andrew Legget el 7/25/2016 en https://quality.embarcadero.com/browse/RSP-13247 ]
Este problema ha existido durante mucho tiempo y no se limita a XE3, XE5, XE7, XE8 ... Ahora hay una larga discusión / lamento en https://quality.embarcadero.com/browse/RSP-13247 cuanto a por qué esto se solucionó en una versión de RAD Studio pero se eliminó en una versión posterior; aparentemente / LAA "dio lugar a fallos al vincular de forma incremental con la RTL estática". De acuerdo con la publicación del 28 / Mar / 16 12:14 PM por Dennis Jones en ese hilo, el parche / LAA NO corrige los otros errores del vinculador "EXE1825" o "sin memoria".
Lea a continuación si desea ver tres formas en que se puede parchar ilink32.exe ...
Establezca la marca Large Address Aware con la herramienta lamarker , descargable desde: http://cc.embarcadero.com/Item/30459 (gracias a Doug Hay, 19 / Jul / 16 publicación en https://quality.embarcadero.com/browse/RSP-13247 ):
lamarker -M -Filink32.exe
(Puede hacer esto directamente en su directorio C:/Program Files (x86)/Embarcadero/Studio/17.0/bin
(o .../18.0/bin
); cambiará el nombre del ilink32.exe
ilink32.exe.old
original a ilink32.exe.old
- si tienes permiso)
--O--
Use
editbin
de MS Visual Studio , si ya tiene instalado (Microsoft afirma queeditbin
debe ejecutarse desde el IDE). Como paso preliminar, copiebcc32.exe
eilink32.exe
para evitar el bloqueo de UAC (y hacer una copia de seguridad de ellos)copy "C:/Program Files (x86)/Embarcadero/RAD Studio/12.0/bin/bcc32.exe" .
copy "C:/Program Files (x86)/Embarcadero/RAD Studio/12.0/bin/ilink32.exe" .
editbin /LARGEADDRESSAWARE bcc32.exe
editbin /LARGEADDRESSAWARE ilink32.exe
- O -
- Establezca la
editbin
Large Address Aware usandoeditbin
del paquete masm32 :
Descargue desde http://www.masm32.com/download.htm , que crea c:/masm32/bin/editbin.exe
. Recibí algunas advertencias (que involucraban los ordinales 201 y 203) durante la instalación de MASM32, pero su autoprueba pasó, y todo lo que necesitaba era editbin.exe
.