Arch Linuxでglibcを再構築する方法は?


8

「静的なTLSを使用して一部のライブラリを動的にロードするため、MATLABはLinuxでかなり台無しになっているように見えます

推奨される回避策glibcは、より大きなで再構築することDTV_SURPLUSです。これは私に2つの質問を残します:

  • glibcArch Linuxで再構築して、DTV_SURPLUS?absツリーでPKGBUILDを調べたところ、DTV_SURPLUSどこにも表示されなかったため、どこに変更を加えるかわかりません。
  • どのような値に設定DTV_SURPLUSしますか?おそらく、それをに設定すること 2^64は、やり過ぎであり、悪い考えです。

MATLABの問題は、R2014aの次のMWEで確認できます。

>> ones(10)*ones(10);
>> doc('help');
Exception in thread "XPCOMMessageLoop" java.lang.UnsatisfiedLinkError: /opt/matlab/sys/jxbrowser/glnxa64/xulrunner/xulrunner-linux-64/libxul.so: dlopen: cannot load any more object with static TLS
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(Unknown Source)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.load0(Unknown Source)
    at java.lang.System.load(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.c(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.a(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.MozillaToolkit.initialize(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.AppShellXPCOMThread$b.run(Unknown Source)
Exception in thread "XPCOMMessageLoop" java.lang.UnsatisfiedLinkError: /opt/matlab/sys/jxbrowser/glnxa64/xulrunner/xulrunner-linux-64/libxul.so: dlopen: cannot load any more object with static TLS
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(Unknown Source)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.load0(Unknown Source)
    at java.lang.System.load(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.c(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.a(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.MozillaToolkit.initialize(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.AppShellXPCOMThread$b.run(Unknown Source)
Exception in thread "XPCOMMessageLoop" java.lang.UnsatisfiedLinkError: /opt/matlab/sys/jxbrowser/glnxa64/xulrunner/xulrunner-linux-64/libxul.so: dlopen: cannot load any more object with static TLS
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(Unknown Source)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.load0(Unknown Source)
    at java.lang.System.load(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.c(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.a(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.MozillaToolkit.initialize(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.AppShellXPCOMThread$b.run(Unknown Source)
Exception in thread "XPCOMMessageLoop" java.lang.UnsatisfiedLinkError: /opt/matlab/sys/jxbrowser/glnxa64/xulrunner/xulrunner-linux-64/libxul.so: dlopen: cannot load any more object with static TLS
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(Unknown Source)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.load0(Unknown Source)
    at java.lang.System.load(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.c(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.a(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.MozillaToolkit.initialize(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.AppShellXPCOMThread$b.run(Unknown Source)
Exception in thread "XPCOMMessageLoop" java.lang.UnsatisfiedLinkError: /opt/matlab/sys/jxbrowser/glnxa64/xulrunner/xulrunner-linux-64/libxul.so: dlopen: cannot load any more object with static TLS
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(Unknown Source)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.load0(Unknown Source)
    at java.lang.System.load(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.c(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.impl.linux.LinuxMozillaToolkit.a(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.MozillaToolkit.initialize(Unknown Source)
    at com.teamdev.jxbrowser.gecko.xpcom.AppShellXPCOMThread$b.run(Unknown Source)

ones(10)*ones(10);動的にリンクされたlibiomp5.soBLASライブラリをロードする場所libxul.so。HTMLベースのドキュメントブラウザーに必要な動的にリンクされた十分なスペースが残っていないようです。パッチを適用したバージョンのを使用して、この特定のMWEを回避できる可能性がありますlibiomp5.soが、一般的な問題は引き続き解決しません。


おそらく、VMでテストすることによって、glibcがより高いDTV_SURPLUSですでにコンパイルされているディストリビューションがあるかどうかを確認することをお勧めします。
ゴルディロックス2014

@goldilocksはchrootで十分でしょうか、それとも完全なVMが必要ですか?
StrongBad 14

私はこれを見つけました:stackoverflow.com/questions/19268293/…そしてこれ:mathworks.com/matlabcentral/answers/…。「静的TLSでこれ以上オブジェクトをロードできない」後のGoogle検索は、より多くのアイデアを提供するためにバインドされています。
schaiba 14

私は私の質問のSOの質問にリンクしており、そこで再構築のアイデアglibcが提案されました。
StrongBad 14

カーネルは問題ではないので、chrootを使用できます。
ゴルディロックス2014

回答:


2

カスタムDTV_SURPLUSでglibcを再コンパイルし、既存のバージョンを上書きするには:

  1. /var/abs/core/glibc別のディレクトリにコピーして、ルートにならずcdにそのディレクトリに書き込むことができるようにします。
  2. makepkg -oビルドせずにソースコードをダウンロードして抽出するために使用します(ビルドする前にソースコードを編集するため)。
  3. 編集DTV_SURPLUS中にありますsrc/glibc-<version>/sysdeps/generic/ldsodefs.h。を含む行の番号を変更するだけDTV_SURPLUSです。
  4. でビルドしmakepkg -eます。
  5. でカスタムバージョンをインストールしsudo pacman -U <package file>ます。これにより、以前にインストールされた公式パッケージが上書きされます。

既存のバージョンを上書きしたくない場合は、chrootを使用するか、LD_PRELOADも機能します。

しかし、私はどうあるべきかわかりませDTV_SURPLUSん。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.