C++ 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 во всех моих проектах.
20 ответов
Я нашел обходной путь, который, кажется, работает.
Похоже, что-то связано с поврежденными временными файлами. Мне удалось заставить его работать снова после того, как я сделал "Очистку диска" на моем системном диске.
Я удалил все файлы в списке (все флажки отмечены), а также "Очистить системные файлы"
После этого я мог скомпилировать и связать, даже без перезагрузки. Даже инкрементная ссылка снова заработала!
Примечание. С выпуском 10.2 в Токио C++ Builder в апреле 2017 года Embarcadero обновил компоновщик, по-видимому, решив эту проблему (я не проверял его): "Компоновщик теперь поддерживает большие адреса и может адресовать до 4 ГБ на 64- битовая система, вдвое больше предыдущей суммы. (Некоторые клиенты в прошлом взламывали компоновщик как LAE [sic], переключая бит в заголовке PE; поскольку код не был написан для поддержки LAE, этот хак предотвратил инкрементное связывание и иногда другие функции работают неправильно.) " 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
Но есть надежда: начиная с 10.2 в Токио, у вас есть несколько новых опций для управления LARGEADDRESSAWARE и размерами кучи компоновщика. Дитер Вёльнер сообщил 26 октября 2017 года, что временно устанавливает C++-Linker | Расширенный | Запись дополнительных параметров в "-GF:LARGEADDRESSAWARE" устранила проблему. Но проблема вернулась, и он обнаружил, что, если вы установите значение размера кучи TDS ниже 0x08000000, вы избежите ошибки / сбоя при соединении... на данный момент.
=====================================
Я один из тех клиентов, которые взломали компоновщик как LAA, таким образом вмешиваясь в добавочные ссылки (которые мне не нужны) и решая мою проблему. Если вы намереваетесь продолжать использовать компоновщики в версиях 10.1 или более ранних, и вам не нужны инкрементные ссылки, продолжайте читать.
=====================================
Я решил проблему, установив /LARGEADDRESSAWARE
флаг в ilink32.exe
, Оригинальное решение пришло от Хироюки Симады, используя editbin
и размещено по адресу http://qc.embarcadero.com/wc/qcmain.aspx?d=134775 1/12/2016. Он также применил это к bcc32.exe
; Мне не нужно было
Как публичная служба, я разместил здесь свои исправленные версии ilink32.exe:
- RAD Studio 10 Сиэтл: https://s3.amazonaws.com/public-mfay/ilink32.exe
- RAD Studio 10.1 Берлин: https://s3.amazonaws.com/public-mfay/ilink32-10.1.exe
Чтобы использовать либо, переименуйте ваш ilink32.exe
в каталоге бинарных файлов RAD Studio (например, C:\Program Files (x86)\Embarcadero\Studio\17.0\bin
для RAD Studio Сиэтл, или ...\18.0\bin
для Берлина), и скопируйте мой вместо него, переименовав его в ilink32.exe
,
[Примечание: эти компоновщики /LAA решают проблему для многих, но не для всех пользователей; см. сообщение @Andrew Legget от 25.07.2016 на https://quality.embarcadero.com/browse/RSP-13247 ]
Эта проблема существует уже давно и не ограничивается XE3, XE5, XE7, XE8... В настоящее время на https://quality.embarcadero.com/browse/RSP-13247 ведется длительное обсуждение почему это было исправлено в одной версии RAD Studio, но было исправлено в более поздней версии; по-видимому /LAA "привел к сбоям при инкрементном связывании со статическим RTL". Согласно сообщению Денниса Джонса от 28 марта /16 апреля в этой теме, патч /LAA НЕ исправляет ошибки других компоновщиков "EXE1825" или "недостаточно памяти".
Читайте ниже, если вы хотите увидеть три способа исправления ilink32.exe...
Установите флажок Large Address Aware с помощью инструмента lamarker, который можно загрузить по адресу: http://cc.embarcadero.com/Item/30459 (спасибо Дугу Хэю, сообщение 19/16/16 в https://quality.embarcadero.com/browse/RSP-13247):
lamarker -M -Filink32.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
,
У меня также была эта проблема с 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!!!
Просто запуск XE8 в качестве администратора исправил это для меня.
Как Drewski я столкнулся с ошибкой LME288 после обновления до Windows 10 (x64).
Ошибка исчезла, изменив настройки предотвращения выполнения данных для ilink32.exe
:
- Свойства системы -> Расширенные настройки системы -> Производительность -> Настройки -> Предотвращение выполнения данных
- Включите DEP для всех программ и служб, кроме тех, которые я выбираю ->
ilink32.exe
,
В моем случае, попытка всех других упомянутых здесь вариантов не работала вообще.
То, что, кажется, сделало трюк, вручную установило объем виртуальной памяти в Системных настройках моего компьютера с Windows 10. Он был настроен на автоматическое управление операционной системой, но изменение его на ручное значение (даже если минимум было меньше, чем было назначено автоматически, и это то, что фактически используется), заставило компоновщик работать снова.
В моем случае ОС присвоила что-то вроде 1600 Мб. Я установил минимум на 1024 и максимум на 3072, перезапустил, и теперь компоновщик работает нормально. Используемая сумма говорит о 1024 (даже когда рекомендуемое значение говорит о ~1900).
У меня есть другое решение, которое, надеюсь, поможет кому-то с этим бороться.
Я перепробовал все, и ни одно из предложенных ранее решений не помогло мне. Очистка диска не помогла. Это явно ошибка в C++Builder, которая существовала много лет и до сих пор не исправлена даже в XE8 по состоянию на 2015 год.
К счастью, у меня был другой компьютер с рабочей средой, где тот же проект компилировался. Я скопировал все файлы (*.exe, *.obj и т. Д.) Из выходного каталога (Win32/Debug) с этого компьютера в тот, где у меня возникла проблема, и это волшебным образом исправило C++Builder; все сборки потом начали работать.
Перезагрузка W10 решила эту проблему на XE5, но я деактивирую инкрементную сборку
Исправлено для XE10 и Windows 10 (x64) с Bitdefender IS 2016:
Bitdefender -> Модули -> Антивирус -> Исключения -> Исключенные процессы -> Добавить "...\bin\ilink32.exe" -> Разрешить
Решение очень простое: переменная среды Windows PATH превышает ограничение в 2047 байт.
Пожалуйста, смотрите мое описание здесь: http://blog.bitart.at/lme288/ [немецкий]
Редактировать: мое "решение" длилось всего пару месяцев. После установки Microsoft Visual Studio проблемы вернулись.
Как уже упоминалось в другом ответе: исправление ilink32.exe с
lamarker -M -Filink32.exe
кажется правильным решением.
Изменение языка IDE с французского на английский с помощью BDSSetLang.exe решило для меня ошибку LME288!
Трудно поверить, что у всех вас есть проекты, которым нужно увеличить размер кучи... Все мои LME200 LME288 и другие ошибки Out of Memory точно исчезли только после переустановки всех дополнительных компонентов (Fastreport/Devexpress и т.д.) без отладочной информации . После этого размер файла TDS стал в 3 раза меньше, компоновщик и отладчик работают точно так же, как они были протестированы Embarcadero с одним приложением формы - больше никаких сумасшедших ошибок.
Для меня это кажется абсолютно случайным ... Я также получил ошибку "неизвестное имя кучи". Я пробовал много решений выше, ни одно из них не сработало. Я пробовал использовать ilink от circlepi314, пытался очистить временные файлы, несколько перезагрузок и т. Д. На странице сбоев компоновщика от Embarcadero я обнаружил, что соглашение о вызовах из dll может вызвать проблемы. Мой проект действительно содержал вызовы dll. Я исключил эти вызовы, скомпилировал и снова подключил без каких-либо проблем. Сразу после этого я снова включил эти вызовы, и он также без проблем подключился. Хотя я даже проект почистил между ними. Я даже воспроизвести это уже не могу. Где-то должны быть остатки, которые используются линкером и которых теперь нет. Надеюсь, это поможет кому-то в будущем.
В моем случае это был антивирус Avast - я отключил его, и связь сработала.
Я столкнулся с той же проблемой с 10.4. ilink32 выдавал длинную строку предупреждений при самой первой компиляции после установки. Я проверил флаг наличия большого адреса (LARGEADDRESSAWARE) в параметрах компоновщика, и он уже был установлен. Затем я установил для TDS Heapsize значение ниже 0x08000000 (я использовал 0x07FFFFFF) и выполнил перестройку. На этом этапе ссылка полностью не работает. Затем я сбросил TDS Heapsize на значение по умолчанию 0 и перестроил, после чего ВСЕ предупреждения ilink32 были устранены, и ссылка была полностью чистой.
Я подозреваю, что значение TDS Heapsize не считывается из конфигурации, если оно не установлено явно. Я сомневаюсь, что ввод нуля вместо нуля по умолчанию сработает, поскольку среда IDE может не увидеть изменения значения, поэтому я рекомендую установить какое-то значение, отличное от нуля, построить, затем вернуть к нулю и перестроить.
ILINK32.EXE заблокирован антивирусом AVG. Добавил исключение для ILINK и это исправило.
Windows 10(x64), Rad Studio XE Berlin (добавочная ссылка включена).
Я исправил проблему, исключив "C: \ Program Files (x86) \ Embarcadero \ bin" из антивирусного сканирования Защитника окон.
Я исправил это, убедившись, что папка установки Embarcadero (например, C:\Program Files (x86)\Embarcadero) была исключена из всех антивирусных проверок.
Похоже, что с компоновщиком, поставляемым с 10.2.3, размер кучи TDS может быть установлен до 0x1FF00000
. В более старых и новых версиях этот максимум меньше (дает LME200). Если вам нужен большой размер кучи, я рекомендую использовать компоновщик из 10.2.3. Я также открыл отчет об этом: RSP-27205
У нас возникла та же проблема, и мы решили ее, увеличив виртуальную память для Windows (она была очень низкой, 800Mo, сейчас около 4 Go)