Wyjaśnienie
Na komputerze, jeden z hałd łącznikiem jest zbyt mała dla tego projektu. Projekt łączy się z linią Link z opcją Dynamic RTL, ponieważ w takim przypadku linker potrzebuje mniej pamięci, a sterty są wystarczająco duże.
Możesz użyć opcji linkera -GH
, aby zwiększyć tę stertę, ale najpierw musisz dowiedzieć się, która przepełnienie sterty. Aby to zrobić, włącz wyjście diagnostyczne w linkerze.
Kompilacja z wyjściem diagnostycznym
Kompilacja z wiersza poleceń:
call rsvars
MSBuild /v:diag YourProject.cbproj
Kompilacja z IDE:
- Idź do Narzędzia> Opcje Opcje> Środowisko
- Zmień Gadatliwość do diagnostyczna
- Po budowania projektu, odczytać dane wyjściowe z Output karcie Wiadomości okna
Wzrastające rozmiary sterty
Pod koniec wyjścia, należy znaleźć rozmiary z hałd, podobny do następującego:
The "ILINK32" task is using "ilink32" from "c:\program files (x86)\embarcadero\studio\18.0\bin\ilink32.exe".
Turbo Incremental Link 6.75 Copyright (c) 1997-2016 Embarcadero Technologies, Inc.
Overrun on linker heap: tds
Linker Heaps
------------
system 0x030d4000 0x08000000
tds 0x08710000 0x09400000
c:\program files (x86)\embarcadero\studio\18.0\Bin\CodeGear.Cpp.Targets(3517,5): error : Fatal: Out of memory
The command exited with code 2.
W tym przypadku wystąpiło przepełnienie kupa tds
, więc musimy zwiększyć jej rozmiar. Lewa kolumna podaje liczbę używanych bajtów, a prawa kolumna podaje liczbę przydzielonych bajtów. Nowy rozmiar powinien być większy niż wartość, która jest obecnie w prawej kolumnie.
W tym przypadku rozmiar tds
był 0x09400000
, więc zwiększamy go do 0x0f400000
z następującą opcją: -GHtds=0x0f400000
.
W IDE przejdź do Projekt> Opcje> C++ Linker. Dodaj -GHtds=0x0f400000
do Zaawansowane> Dodatkowe opcje.
Po zapisaniu opcji projektu, należy ponownie skompilować projekt. Jeśli ta sama sterty przepełni się, musisz zwiększyć jej rozmiar jeszcze bardziej. Jeśli przepełnienie innego sterty, należy również zwiększyć jego rozmiar.
Na przykład, jeśli code
sterty przelewa teraz i chcesz zwiększyć jej rozmiar do 0x0a000000
, należy zmienić Dodatkowe opcje do -GHtds=0x0f400000 -GHcode=0x0a000000
.
Więcej szczegółów
Nie ten problem został rozwiązany?
- Jeśli używasz C++ Builder 10.0 lub 10.1, spróbować załatać swój łącznik jak opisano tutaj: LME288 Error in C++ Builder
- Jeśli używasz C++ Builder 10.2, łatanie linker nie działa, ale można spróbować innych rozwiązań w tym samym linku: