Es scheint, als ob MATLAB unter Linux königlich vermasselt ist, weil es "einige Bibliotheken dynamisch mit statischem TLS lädt" , was für mich nichts anderes bedeutet, als dass ich eine Menge Fehler bekomme.
Die vorgeschlagene Lösung besteht darin, glibc
mit einem größeren wieder aufzubauen DTV_SURPLUS
. Dies lässt mich mit zwei Fragen zurück:
- Wie kann ich
glibc
unter Arch Linux neu erstellen, um die zu erhöhenDTV_SURPLUS
? Ich habe mir das PKGBUILD im Bauchmuskelbaum angesehen undDTV_SURPLUS
nirgendwo etwas gesehen, daher weiß ich nicht, wo ich die Änderung vornehmen soll. - Welchen Wert setze
DTV_SURPLUS
ich? Vermutlich2^64
wäre es sowohl übertrieben als auch eine schlechte Idee, es auf zu setzen.
Das Problem mit MATLAB kann mit dem folgenden MWE in R2014a gesehen werden:
>> 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)
Wobei ones(10)*ones(10);
die dynamisch verknüpfte libiomp5.so
BLAS-Bibliothek geladen wird, die nicht genügend Platz für die dynamisch verknüpfte Bibliothek zu lassen scheint, libxul.so
die für den HTML-basierten Dokumentationsbrowser erforderlich ist. Möglicherweise kann ich dieses spezielle MWE mithilfe einer gepatchten Version von umgehen libiomp5.so
, aber das allgemeine Problem besteht weiterhin.
quelle
glibc
vorgeschlagen.Antworten:
So kompilieren Sie glibc mit custom neu
DTV_SURPLUS
und überschreiben die vorhandene Version:/var/abs/core/glibc
in ein anderes Verzeichnis, damit Sie darauf schreiben können, ohne root zu sein, und danncd
in dieses Verzeichnis.makepkg -o
diese Option, um den Quellcode herunterzuladen und zu extrahieren, ohne ihn zu erstellen (da wir den Quellcode vor dem Erstellen bearbeiten).DTV_SURPLUS
sich insrc/glibc-<version>/sysdeps/generic/ldsodefs.h
. Sie können einfach die Nummer in der Zeile ändern, die enthältDTV_SURPLUS
.makepkg -e
.sudo pacman -U <package file>
. Dadurch wird das zuvor installierte offizielle Paket überschrieben.Wenn Sie die vorhandene Version nicht überschreiben möchten, können Sie chroot verwenden, oder LD_PRELOAD funktioniert auch.
Ich bin mir jedoch nicht sicher, was sein
DTV_SURPLUS
soll.quelle