문제

우리는 LIBC5를 사용하는 레거시 링커를 가지고 있으며 몇 가지 요소로 인해 소스가 아닌 이진 만 가지고 있습니다. 그렇습니다. 버전 제어는 현재의 문제로부터 우리를 구해 주었을 것입니다 ... 이제 전체 도구 체인과 제품 라인에 사용되고 있지만이 특정 말은 오래 전부터 사라졌습니다.

이 링커는 Linux 커널 2.6.24에서 작동하지만 2.6.25 (및 2.6.26)에서는 메시지가 실패합니다.

    Virtual memory exceeded in `new'

해당 레거시 컴파일러와 비슷한 문제가 있었지만 일부 stackoverflow.com 답변 그리고 많은 연구에 따르면 컴파일러 문제는 Linux 커널 2.6.25의 "BRK 무작위 배정"으로 인해 발생하는 것으로 나타났습니다. 이에 대한 해결 방법은 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)

그리고 나는 libg ++의 libc5 버전을 설치해야 할지도 모른다. 27. 나는 그것이 최신 LIBG ++를 무시할 것인지 모르기 때문에 주저합니다. So.27은 비 LIBC5 앱에 문제를 일으 킵니다.

따라서 Libg ++의 Libc5 버전을 찾아 설치합니까? 27, 또는 BRK 무작위 화를 비활성화하는 더 좋은 방법이 있습니까?

편집하다

보다 이것 이 검색의 모든 세부 사항과 최종 해상도.

도움이 되었습니까?

해결책

그것은 당신의 질문에 정확하게 대답하지는 않지만, 당신의 상황에서, 나는 알려진 libc+libstdc ++ 조합 또는 커널+libc+libstdc ++ (이 경우 가상 시스템이 필요함)로 chroot를 만들 것입니다. 이런 식으로, 당신은 다른 것을 방해하지 않고 상대적으로 쉽게 시도 할 수 있습니다.

오래된 라이브러리와 호환되는 가장 좋은 방법은 결국이 오래된 도서관을 사용하는 것입니다. 결국이 도서관을 사용하는 것입니다. 툴체인 문제 "이기 때문에 일종의 교도소/chroot/가상 머신을 사용하는 것이 너무 많은 문제가되지 않아야합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top