Ошибка С++ Builder XE7 LME288
Внезапно, из ничего, я получаю ошибку компоновщика 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
У меня нет AV-установки, и проект работает отлично уже более года. Я пробовал:
- Инкрементный линкер отключен/включен, нет разницы...
- Вручную удалять все файлы в /debug, все равно никаких изменений...
- Полная сборка, без разницы...
- Перезагрузите компьютер, никаких изменений...
Это было задано до здесь, но никаких реальных объяснений и решений не было представлено.
Что еще я могу сделать, чтобы исправить это?
ИЗМЕНИТЬ
Я попытался перестроить несколько других проектов, которые работают отлично в течение многих лет, и теперь я получаю ошибку LME288 для всех моих проектов.
Ответы
Ответ 1
Я нашел обходное решение, которое, похоже, работает.
Кажется, что-то связано с поврежденными временными файлами. Мне удалось заставить его работать снова после того, как я сделал "Очистка диска" на своем системном диске.
Я удалил все файлы в списке (все флажки отмечены), а также "Очистить системные файлы"
После этого я мог компилировать и связывать, даже без перезагрузки.
Даже инкрементная связь снова начала работать!
Ответ 2
Примечание: с выпуском С++ Builder 10.2 в Токио в апреле 2017 года Embarcadero обновил компоновщик, очевидно, решив эту проблему (я ее не тестировал): "Теперь компоновщик имеет большой адрес и может адресовать до 4 ГБ на 64-битная система, в два раза превышающая предыдущую сумму. (Некоторые клиенты взломали компоновщик как LAE [sic] в прошлом, переключив бит в PE-заголовок, так как код не был записан как LAE-aware, этот хак предотвратил инкрементная привязка, а иногда и другая функциональность от правильной работы.)" https://community.embarcadero.com/blogs/entry/what-s-new-in-c-builder-10-2-part-1-the-linker
Однако 24 мая 2017 года Эшли Бэйт сообщила, что 10,2 Токийский линкер все еще не решает проблему: https://quality.embarcadero.com/browse/RSP-12869 p >
Но есть еще надежда: начиная с 10.2 Tokyo, у вас есть несколько новых возможностей для управления размерами LARGEADDRESSAWARE и компоновщика. Дитер Woellner сообщил 26-Oct-2017, что временно, установка С++ - Linker | Расширенный | Вкладка "Дополнительные параметры" в "-GF: LARGEADDRESSAWARE" устранила проблему. Но проблема вернулась, и он обнаружил, что если вы установите значение TDS Heapsize на значение ниже 0x08000000, вы избегаете ошибки/сбоя при связывании... на данный момент.
=====================================
Я один из тех клиентов, которые взломали компоновщик как ЛАА, тем самым мешая инкрементному связыванию (которое мне не нужно) и решению моей проблемы. Если вы намерены продолжать использовать компоновщики в версиях 10.1 или более ранних версий, и вам не требуется инкрементная привязка, читайте дальше.
=====================================
Я решил проблему, установив флаг /LARGEADDRESSAWARE
в ilink32.exe
. Исходное решение
Хироюки Симада, используя editbin
, и отправил на http://qc.embarcadero.com/wc/qcmain.aspx?d=134775 на 1/12/2016. Он также применил его к bcc32.exe
; Мне не нужно было.
Как публичная служба, я опубликовал мои исправленные версии ilink32.exe здесь:
Чтобы использовать либо, переименуйте ilink32.exe
в каталог двоичных файлов RAD Studio (например, C:\Program Files (x86)\Embarcadero\Studio\17.0\bin
для RAD Studio Seattle, или ...\18.0\bin
для Берлина), и скопируйте его на свое место, переименовав его в ilink32.exe
.
[Примечание: эти/LAA-линкеры решают проблему для многих, но не для всех пользователей; см. сообщение @Andrew Legget на 7/25/2016 в https://quality.embarcadero.com/browse/RSP-13247]
Эта проблема существует уже давно и не ограничивается XE3, XE5, XE7, XE8... В настоящее время существует продолжительное обсуждение/плач в https://quality.embarcadero.com/browse/RSP-13247 относительно того, почему это было исправлено в одной версии RAD Studio, но в более поздней версии; по-видимому,/LAA "приводили к сбоям при постепенном связывании со статическим RTL". Согласно сообщению 28/Mar/16 12:14 PM от Dennis Jones в этом потоке, патч /LAA НЕ обращается к другим ошибкам компоновщика "EXE1825" или "вне памяти".
Прочтите ниже, если вы хотите увидеть три способа, с помощью которых ilink32.exe может быть исправлен...
(Вы можете сделать это непосредственно в своем каталоге C:\Program Files (x86)\Embarcadero\Studio\17.0\bin
(или ...\18.0\bin
), при этом вы переименуете оригинал ilink32.exe
в ilink32.exe.old
)
- ИЛИ -
-
Используйте editbin
из MS Visual Studio, если у вас уже установлен такой файл (Microsoft утверждает, что editbin
должен запускаться из среды IDE). В качестве предварительного шага скопируйте bcc32.exe
и ilink32.exe
, чтобы предотвратить блокировку UAC (и для их резервного копирования)
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
- ИЛИ -
- Установите флаг "Значок большого адреса" с помощью
editbin
из пакета masm32:
Загрузить с http://www.masm32.com/download.htm, который создает c:\masm32\bin\editbin.exe
. Я получил несколько предупреждений (включая ординалы 201 и 203) во время установки MASM32, но прошел его самотестирование, и все, что мне было нужно, было editbin.exe
.
Ответ 3
У меня также была проблема с RAD Studio XE8, установленным в Windows 10. При установке в Windows 7 (x86) RAD Studio XE8 работала правильно.
После обновления до Windows 10 (x86) я столкнулся с ошибками неизвестной кучи LME288. Сначала он не появлялся в Windows 10, но если бы я что-то установил, оно всплыло бы. Если я верну компьютер на Windows 7, он исчезнет.
После небольшого исследования в сети я нашел решение. Проблема с ilink32.exe связана с памятью, и вам нужно включить пространство памяти 3 ГБ при загрузке на компьютер. Вот что я делаю сейчас, если эта ошибка появляется снова:
- Запустите командную строку как администратор.
- Тип (без кавычек) "bcdedit/set IncreaseUserVa 3072"
- Перезагрузите компьютер.
После этого ilink32 работает правильно.
Я обнаружил, что после установки более новой версии Acronis True Image (2016) ошибка LME288 вернулась. Запустив здесь решение bcdedit, он исправил компоновщик RAD Studio XE8!!!
Ответ 4
Просто запустив XE8, как администратор, исправил его для меня.
Ответ 5
В моем случае попытки всех других упомянутых здесь опций вообще не работают.
Кажется, что трюк заключался в том, чтобы вручную установить объем виртуальной памяти в системных настройках моей машины Windows 10. Он был настроен на автоматическое управление операционной системой, но изменение ее на ручное значение (даже если минимум был меньше того, что было назначено автоматически, и это то, что используется на самом деле) заставил компоновщика работать снова.
В моем случае OS назначил что-то вроде 1600 Мб. Я установил минимум в 1024 и максимум до 3,072, перезапустил, и теперь компоновщик работает нормально. Используемое количество говорит 1024 (даже если рекомендуемое значение говорит ~ 1900).
Ответ 6
Как Drewski Я столкнулся с ошибкой LME288 после обновления до Windows 10 (x64).
Ошибка исчезла, изменив настройки предотвращения выполнения данных для ilink32.exe
:
- Свойства системы → Расширенные настройки системы → Производительность → Настройки → Предотвращение выполнения данных
- Включите DEP для всех программ и сервисов, кроме тех, которые я выбираю →
ilink32.exe
.
Ответ 7
У меня есть другое решение, которое, надеюсь, поможет кому-то бороться с этим.
Я пробовал все, и ни один из предложенных ранее решений не работал у меня. Очистка диска не помогла. Очевидно, что это ошибка в С++ Builder, которая существует уже много лет и до 2015 года по-прежнему не фиксируется даже в XE8.
К счастью, у меня был другой компьютер с рабочей средой, в которой тот же проект компилировался. Я скопировал все файлы (*.exe, *.obj и т.д.) Из выходного каталога (Win32/Debug) с этого компьютера на тот, где у меня возникла проблема, и это волшебным образом установило С++ Builder; все сборки после этого начали работать.
Ответ 8
Исправлено для XE10 и Windows 10 (x64) с Bitdefender IS 2016:
Bitdefender → Модули → Антивирус → Исключения → Исключенные процессы → Добавить "...\bin\ilink32.exe" → Разрешить
Ответ 9
Перезагрузка W10 решила эту проблему на XE5
но я дезактивирую инкрементную сборку
Ответ 10
У нас та же проблема и она была решена путем увеличения виртуальной памяти для Windows (она была очень низкой, 800Mo, сейчас около 4 Go)
Ответ 11
Я исправил это, убедившись, что папка установки Embarcadero (например, C:\Program Files (x86)\Embarcadero) была исключена из всех антивирусных программ.
Ответ 12
Решение очень просто: переменная окружения Windows PATH превышает свой предел в 2047 байт.
Пожалуйста, смотрите мое описание здесь:
http://blog.bitart.at/lme288/ [немецкий]
Ответ 13
Windows 10 (x64), Rad Studio XE Berlin (добавочная ссылка включена).
Я исправил проблему, исключив
" C:\Program Files (x86)\Embarcadero\bin" из антивируса Window Defender сканирует.
Ответ 14
Изменение языка IDE с французского на английский с помощью BDSSetLang.exe
решил для меня ошибку LME288!