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:

Чтобы использовать либо, переименуйте ваш 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...


  1. Установите флажок 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 - если у вас есть разрешение)

--ИЛИ ЖЕ--

  1. использование 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

-- ИЛИ ЖЕ --

  1. Установите флажок Большой адрес с помощью 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 ГБ памяти при загрузке на компьютере. Вот что я делаю сейчас, если эта ошибка появится снова:

  1. Запустите командную строку от имени администратора.
  2. Введите (без кавычек) "bcdedit /set IncreaseUserVa 3072"
  3. Перезагрузите компьютер.

После этого 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)

Другие вопросы по тегам