이 것 같다MATLABLinux에서 완전히 망가졌습니다."정적 TLS를 사용하는 일부 라이브러리의 동적 로딩", 많은 오류가 발생한다는 점을 제외하면 나에게는 이해가 되지 않습니다.
glibc
제안된 해결 방법은 더 큰 것을 사용하는 것입니다 DTV_SURPLUS
. 이로 인해 두 가지 질문이 남습니다.
glibc
증가시키기 위해 Arch Linux에서 재구축하는 방법은 무엇입니까DTV_SURPLUS
? PKGBUILD에 대한 ABS 트리를 보았지만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);
동적으로 링크된 BLAS 라이브러리가 로드되는데 , libiomp5.so
이는 libxul.so
HTML 기반 문서 브라우저에 필요한 동적 링크를 위한 충분한 공간을 남겨두지 않는 것 같습니다. 패치 버전을 사용하여 이 특정 MWE를 해결할 수 있었지만 libiomp5.so
일반적인 문제는 여전히 남아 있습니다.
답변1
glibc를 사용자 정의 버전으로 다시 컴파일 DTV_SURPLUS
하고 기존 버전을 덮어쓰려면 다음을 수행하십시오.
/var/abs/core/glibc
루트가 되지 않고도 쓸 수 있도록 다른 디렉터리에 복사한 다음cd
해당 디렉터리에 복사합니다.- 빌드하지 않고 소스 코드를 다운로드하고 추출하는 데 사용됩니다
makepkg -o
(빌드하기 전에 소스 코드를 편집하므로). - 편집 내용
DTV_SURPLUS
은 에 있습니다src/glibc-<version>/sysdeps/generic/ldsodefs.h
. 포함된 행의 숫자만 변경하면 됩니다DTV_SURPLUS
. - 으로 빌드하세요
makepkg -e
. - 사용자 정의 버전을 설치합니다
sudo pacman -U <package file>
. 이전에 설치된 공식 패키지를 덮어쓰게 됩니다.
기존 버전을 덮어쓰지 않으려면 chroot를 사용하거나 LD_PRELOAD도 작동합니다.
DTV_SURPLUS
그러나 그것이 무엇인지 잘 모르겠습니다 .