Подтвердить что ты не робот

Ошибка С++ 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 для всех моих проектов.

4b9b3361

Ответ 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)

- ИЛИ -

  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.

Ответ 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!