MatLab错误:无法使用静态TLS打开

MatLab错误:无法使用静态TLS打开,matlab,libraries,lapack,blas,dlopen,Matlab,Libraries,Lapack,Blas,Dlopen,从几天以来,我在使用MATLAB时不断收到相同的错误,这在使用dlopen时的某个时刻发生。我对MATLAB很陌生,这就是为什么我不知道该怎么做。谷歌似乎也帮不了我。当我尝试做一个特征向量时,我得到: Error using eig LAPACK loading error: dlopen: cannot load any more object with static TLS 我在进行乘法运算时也得到了这个结果: Error using * BLAS loading error: dlo

从几天以来,我在使用MATLAB时不断收到相同的错误,这在使用
dlopen
时的某个时刻发生。我对MATLAB很陌生,这就是为什么我不知道该怎么做。谷歌似乎也帮不了我。当我尝试做一个特征向量时,我得到:

Error using eig
LAPACK loading error:
dlopen: cannot load any more object with static TLS
我在进行乘法运算时也得到了这个结果:

Error using  * 
BLAS loading error:
dlopen: cannot load any more object with static TLS
我当然在寻找解决这个问题的办法,但我不太明白,也不知道该怎么办。这些是我发现的线程:

  • 有人能帮我吗

    演示此错误的函数调用示例
    我也有同样的问题,我想我已经解决了

    安装matlab时使用自定义安装(我第一次没有这样做)。选择在预定义文件夹(/usr/local/bin)中创建指向matlab脚本的符号链接。这对我起了作用

    这是自R2012b(8.0)以来就知道的MATLAB。MATLAB使用静态TLS(线程本地存储,例如参见gcc编译器标志-ftls模型)动态加载一些LIB。加载太多这样的库=>没有剩余空间

    到目前为止,mathwork唯一的解决方法是通过尽早使用重要的(!)lib来加载它们(他们建议在startup.m中添加“one(10)*one(10);”。我最好不要评论这个“解决方案策略”

    自从R2013b(8.2.0.701)使用Linux x86_64以来,我的经验是:不要使用“doc”(图形帮助系统)!我认为这个doc实用程序(libxul等)使用了大量静态TLS内存

    以下是更新(2013/12/31) 以下所有测试均使用Fedora 20(使用glibc-2.18-11.fc20)和Matlab 8.3.0.73043(R2014a预发布)进行

    有关TLS的更多信息,请参阅 Ulrich Drepper,线程本地存储的ELF处理,版本0.212013, 目前可在和上获得

    到底发生了什么?

    MATLAB动态(使用dlopen)加载几个需要tls初始化的库。所有这些LIB都需要dtv(动态线程向量)中的一个插槽。因为MATLAB在编译/链接时在运行时动态加载其中几个LIB,所以链接器(在mathworks)没有机会计算所需的插槽(这是重要的部分)。现在,动态库加载器的任务是在运行时处理这种情况。但这并不容易。引用dl open.c:

    对于静态TLS,我们必须在此处和此处分配内存 现在。这包括在DTV中分配内存。但是我们 除我们自己的数字电视外,不能更改任何其他数字电视。那么,如果我们 无法保证数字电视中有我们没有的空间 甚至尝试一下也会失败

    glibc的动态库加载器中有一个编译时常量(称为DTV_盈余,请参见glibc source/sysdeps/generic/ldsodefs.h),用于为此类混乱保留大量额外的插槽(在多线程程序中使用静态TLS动态加载库)。在Fedora 20的glibc版本中,该值为14

    以下是我的案例中第一个需要dtv插槽的LIB(运行MATLAB):

    matlabroot/bin/glnxa64/libut.so
    /lib64/libstdc++.so.6
    /lib64/libpthread.so.0
    matlabroot/bin/glnxa64/libunwind.so.8
    /lib64/libuuid.so.1
    matlabroot/sys/java/jre/glnxa64/jre/lib/amd64/server/libjvm.so
    matlabroot/sys/java/jre/glnxa64/jre/lib/amd64/libfontmanager.so
    matlabroot/sys/java/jre/glnxa64/jre/lib/amd64/libt2k.so
    matlabroot/bin/glnxa64/mkl.so
    matlabroot/sys/os/glnxa64/libiomp5.so
    /lib64/libasound.so.2
    matlabroot/sys/jxbrowser/glnxa64/xulrunner/xulrunner-linux-64/libxul.so
    /lib64/libselinux.so.1
    /lib64/libpixman-1.so.0
    /lib64/libEGL.so.1
    /lib64/libGL.so.1
    /lib64/libglapi.so.0
    
    是超过14=>太多=>dtv中没有剩余插槽。这就是错误消息试图告诉我们的,尤其是mathworks

    作为记录:为了不违反MATLAB的许可证,我没有调试、反编译或反汇编MATLAB附带的二进制文件的任何部分。我只调试了Fedora20的免费和开放的glibc二进制文件,MATLAB使用这些二进制文件动态加载libs

    可以做些什么来解决这个问题?

    有3种选择:

    (a) 重建MATLAB,不要动态加载这些库 (使用初始exec tls模型)而不是针对它们进行链接(然后是链接器) 可以计算所需的插槽数!)

    (b) 重新生成这些LIB并确保它们未使用初始exec tls模型

    (c) 重建glibc并增加中的DTV_盈余 glibc/sysdeps/generic/ldsodefs.h

    显然,选项(a)和(b)只能由mathworks完成

    对于选项(c),不需要MATLAB源,因此无需mathworks即可完成

    mathworks的状况如何?

    我真的试图向“MathWorks技术支持部门”解释这一点。但我的印象是:他们不理解我。2014年1月,他们关闭了我的支持记录,并建议与技术支持经理进行电话(!)对话

    我会尽我最大的努力解释这一点,但说实话,我不是很自信

    更新(2014/01/10):目前mathworks正在尝试选项(b)


    更新(2014/03/19):对于文件libiomp5.so,您可以在mathworks下载新编译的版本(无静态TLS)。其他的libs呢?没有改善。因此,如果用“doc”获得“dlopen:cannotloadanyobjectwithstatictls”,请不要感到惊讶,例如,请参见。

    我也遇到了同样的问题,并通过增加Java堆内存解决了这个问题。转到首选项>常规>Java堆内存,并增加分配的内存。

    重新启动Matlab为我解决了问题。

    已于2014年1月30日更新。 libiomp5.so附带了一个zip文件 我用MatlabR2013B在Mageia4x86u64上测试了它。
    我现在可以使用Matlab的文档打开演示,没有任何问题。

    我对Matlab2013b和Matlab2014a都有相同的问题。mathworks为libiomp5.so提供的修复程序只解决了LAPACK不工作的问题。但是,我无法使用使用OpenMp的外部库(例如VL_FEAT):我仍然会遇到错误 “dlopen:无法再加载任何具有静态TLS的对象。”


    唯一对我有效的方法是降级到Matlab2012b。

    我遇到了这个问题,因为带有数组的“bar”(用于条形图)只给了我一个蓝色块,没有抛出错误。重新启动首先解决了问题。但是在一个内存错误之后(在处理了一个非常大的文件之后),我就是无法克服这个蓝块问题

    在矩阵输入上使用“hist”会给我带来“BLAS加载错误”问题,并导致我出现这个线程。Th
    matlabroot/bin/glnxa64/libut.so
    /lib64/libstdc++.so.6
    /lib64/libpthread.so.0
    matlabroot/bin/glnxa64/libunwind.so.8
    /lib64/libuuid.so.1
    matlabroot/sys/java/jre/glnxa64/jre/lib/amd64/server/libjvm.so
    matlabroot/sys/java/jre/glnxa64/jre/lib/amd64/libfontmanager.so
    matlabroot/sys/java/jre/glnxa64/jre/lib/amd64/libt2k.so
    matlabroot/bin/glnxa64/mkl.so
    matlabroot/sys/os/glnxa64/libiomp5.so
    /lib64/libasound.so.2
    matlabroot/sys/jxbrowser/glnxa64/xulrunner/xulrunner-linux-64/libxul.so
    /lib64/libselinux.so.1
    /lib64/libpixman-1.so.0
    /lib64/libEGL.so.1
    /lib64/libGL.so.1
    /lib64/libglapi.so.0