2009-04-27 14 views
2

libc5を使用する従来のリンカがあります。いくつかの要因により、バイナリのみがありソースはありません。はい、バージョンコントロールによって、私たちの現在の問題から私たちを救うことができました。これは現在、完全なツールチェーンと製品ラインで使用されていますが、この特定の馬は長く去っています。linux kernel 2.6.25で従来のリンカ(libc5を使用)が失敗する

このリンカーは、Linuxカーネル2.6.24では動作するのですが、2.6.25(および2.6.26)で、それは我々が対応する従来のコンパイラで同様の問題があったが、とのメッセージ

 
    Virtual memory exceeded in `new' 

で失敗しますいくつかのstackoverflow.com answersと多くの研究では、コンパイラの問題は、Linuxカーネル2.6.25で "brkのランダム化"によって引き起こされたことが判明しました。これを回避するには、sysctl varsと環境変数を設定することです。var:

 
    /proc/sys/kernel/randomize_va_space = 0 or 1 
    setenv MALLOC_TOP_PAD_ 536870912 

これはリンカーには役立ちません。

私は、リンカは複数の共有ライブラリの依存関係(コンパイラが唯一のlibC.so.5を持っていた)があることを「LDD」を使用してから発見した

 
    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 ++。so.27のlibc5バージョン。私はそれが最新のlibg ++。so.27をオーバーライドするかどうか分からず、libc5以外のアプリケーションに問題を引き起こすので、私はそれをするのをためらっています。

libg ++。so.27のlibc5バージョンを見つけてインストールするか、またはbrkランダム化を無効にするより良い方法がありますか、またはカーネル2.6.24と2.6.25の間に別の違いがありますリンカーの問題?

編集

この検索のすべての詳細についてthisを参照してください、そして私の最終的な解決。

+0

私は、x86-64/amd64でlibcを有効にした64ビットメモリ管理コードに変更があったことを知っています。 – ewanm89

+0

リンカ/ローダはデスクトップPC(32ビット)で動作しますが、これはLinuxカーネル2.6.26を実行しています(これはDebian安定版インストールです)。リンカは、32ビットRISC CPUを備えた埋め込みプロセッサ用のコードを生成します。 – JimKleck

答えて

4

あなたの質問にはちゃんと答えることはできませんが、あなたの状況では、わかっているlibc + libstdC++の組み合わせ、あるいはkernel + libc + libstdC++のchrootを作成します(この場合、 、明らかに)。こうすることで、他の何かを混乱させることなく比較的簡単に物事を試すことができます。

古いライブラリとの互換性を保つ最良の方法は、結局のところ古いライブラリを使用することです。ツールチェーンの問題であるため、いくつかの種類のjail/chroot/virtual machineを使用することはあまりありません問題の?

関連する問題