2009-04-27 9 views
2

У нас есть устаревший компоновщик, который использует libc5, и из-за нескольких факторов у нас есть только двоичный файл, а не источник. Да, контроль версий спас нас от нашей текущей проблемы ..., которая теперь используется для нашей полной цепочки инструментов и линейки продуктов, но эта конкретная лошадь давно ушла.устаревший компоновщик (использует libc5) терпит неудачу в ядре linux 2.6.25

Этот компоновщик работает на Linux ядро ​​2.6.24, но на 2.6.25 (и 2.6.26) он терпит неудачу с сообщением

 
    Virtual memory exceeded in `new' 

У нас была аналогичная проблема с соответствующим унаследованной компилятором, но с некоторые stackoverflow.com answers и многие исследования обнаружили, что проблема с компилятором была вызвана «рандомизацией брк» в Linux 2.6.25. Обходной путь для этого является установка SYSCTL ВАР и вар среды:

 
    /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, или есть какой-то лучший способ отключить рандомизацию БРК, или есть другое различие между ядром 2.6.24 и 2.6.25, которое вызывает проблема линкера?

Редактировать

См this для всех деталей этого поиска, и мое окончательное решение.

+0

что это за платформа, я знаю, что в 64-битном коде управления памятью произошли изменения, которые немного ускорили libc на x86-64/amd64 ... – ewanm89

+0

Линкеровщик/загрузчик работает на моем настольном ПК (32 бит) который запускает linux kernel 2.6.26 (это стабильная установка debian). Компилятор создает код для встроенного процессора с 32-битным RISC-процессором. – JimKleck

ответ

4

Он не отвечает точно на ваш вопрос, но в вашей ситуации я бы создал chroot с помощью комбинации libc + libstdC++ из известной для работы или даже с ядром + libc + libstdC++ (в этом случае вам нужна виртуальная машина , очевидно). Таким образом, вы можете легко пробовать вещи, не нарушая ничего другого.

Лучший способ быть совместимым со старой библиотекой состоит в том, чтобы использовать эту старую библиотеку в конце концов, и поскольку это «просто» проблема с программными цепочками, использование какой-либо системы jail/chroot/virtual не должно быть слишком большим проблемы?