У нас есть устаревший компоновщик, который использует libc5, и из-за нескольких факторов у нас есть только двоичный файл, а не исходный. Да, управление версиями спасло бы нас от нашей текущей проблемы ... которая сейчас используется для всей нашей цепочки инструментов и линейки продуктов, но этой конкретной лошади уже давно нет.
Этот компоновщик работает на ядре Linux 2.6.24, но на 2.6.25 (и 2.6.26) он выходит из строя с сообщением
Virtual memory exceeded in `new'
У нас была похожая проблема с соответствующим устаревшим компилятором, но с некоторыми stackoverflow.com ответов , и многие исследования обнаружили, что проблема компилятора была вызвана "рандомизацией brk" в ядре linux 2.6.25 , Обходной путь для этого должен установить sysctl vars и переменную окружения:
/proc/sys/kernel/randomize_va_space = 0 or 1
setenv MALLOC_TOP_PAD_ 536870912
Это, однако, не помогает компоновщику.
При использовании «ldd» я обнаружил, что компоновщик имеет больше общих библиотечных зависимостей (компилятор имел только libc.so.5):
libg++.so.27 => /usr/lib/libg++.so.27 (0xb7eca000)
libstdc++.so.27 => /usr/lib/libstdc++.so.27 (0xb7e99000)
libm.so.5 => /lib/libm.so.5 (0xb7e90000)
libc.so.5 => /lib/libc.so.5 (0xb7dd3000)
И я прочитал, что мне, возможно, придется установить libc5 версию libg ++. So.27. Я не решаюсь сделать это, так как не знаю, переопределит ли это последнюю версию libg ++. So.27 и вызовет проблемы для приложений, не относящихся к libc5.
Итак, я могу найти и установить версию libc5 libg ++. So.27, или есть какой-то лучший способ отключить рандомизацию brk, или есть другое различие между ядром 2.6.24 и 2.6.25, которое вызывает компоновщик проблема?
Редактировать
См. this для всех деталей этого поиска и моего окончательного решения.