SORU
9 EKİM 2013, ÇARŞAMBA


MatLab hata: statik TLS ile açılamıyor

Birkaç günden beri, ben sürekli dlopen ile bir noktada olur MATLAB kullanırken aynı hatayı alıyordum. MATLAB için oldukça yeni ve ben bunun ne olduğunu bilmiyorum neden. Google da bana yardım etmiyor. Bir standard yapmaya çalıştığımda bu çıkıyor:

Error using eig
LAPACK loading error:
dlopen: cannot load any more object with static TLS

Ben de bir çarpma yaparken bu olsun:

Error using  * 
BLAS loading error:
dlopen: cannot load any more object with static TLS

Elbette bu sorunun çözümü için baktım, ama çok fazla anlamıyorum ve ne yapacağımı bilmiyorum. Bu konuları buldum

  1. How do I use the BLAS library provided by MATLAB?
  2. http://www.mathworks.de/de/help/matlab/matlab_external/calling-lapack-and-blas-functions-from-mex-files.html

Birisi bana lütfen yardımcı olabilir?

Fonksiyon örnekleri bu hata gösteren çağırır

>> randn(3,3)

ans =

 2.7694    0.7254   -0.2050             
-1.3499   -0.0631   -0.1241             
 3.0349    0.7147    1.4897            

>> eig(ans)

Error using eig
LAPACK loading error:
dlopen: cannot load any more object with static TLS

CEVAP
19 EKİM 2013, CUMARTESİ


bug no 961964 MATLAB R2012b beri bilinen (8.0). MATLAB dinamik olarak statik TLS (yerel depolama, örneğin gcc derleyici bayrağı-ftl'ler-model görmek thread) ile bazı libs yükler. Yükleme çok fazla böyle libs =>hiçbir alan kalmadı.

Şimdi mathwork tek çözüm bu önemli yükü kadar(!) ilk (birler(10); "başlangıç.*" olanlar(10) koymak için öneririm kullanarak libs m). Ben en iyisi bu konuda yorum yok "". çözüm stratejisi

R2013b deneyimim olduğu için: kullanmayın "doktor" (grafik yardım sistemi)! Bu doktor-yardımcı (vb libxul.) bence statik TLS fazla bellek kullanarak.

Burada bir güncelleme (2013/12/31)

Aşağıdaki tüm testler Fedora 20 (- 2.18-11 abone olarak giriş ile.ile yapıldı fc20) ve 8.3.0.73043 (R2014a yayın Öncesi) ve yeter şart olmasıdır.

TLS hakkında daha fazla bilgi için, bkz: İçin işleme iş Parçacığı Yerel Ulrich Drepper ELF Depolama, Sürüm 0.21, 2013, şu anda Akkadia Redhat boş.

Ne oluyor tam olarak?

MATLAB dinamik (dlopen) tls gereken birkaç kitaplıkları başlatma yükler. Tüm bu libs aygıtını bir yuva (dinamik iplik vektör). MATLAB yükler bu libs çeşitli dinamik zaman linker bağlantı/derleme zamanında (mathworks) yuva gerekli saymak için hiçbir şans (önemli olan bu) vardı çünkü. Şimdi dinamik lib loader görevi zamanında böyle bir durumda işlemek için. Ama bu kolay değil. Alıntı dl-open.c:

Statik TLS için bellek ayrılamadı ve burada var şimdi. Bu dijital TV bellek ayırma içerir. Biz ama herhangi bir dijital TV kendi dışındaki değiştiremez. Eğer öyleyse, olamaz bilmiyoruz, TV Odası olduğunu garanti ve yükleme başarısız.

Zaman sabiti (DTV_SURPLUS, abone olarak giriş-kaynak/sysdeps görmek aradı/genel/ldsodefs.bir derleme var h) ek yuvaları bir dizi ayrılması için abone olarak giriş dinamik lib loader darmadağınık (dinamik statik TLS ile yükleme libs çoklu bir program). Fedora 20 abone olarak giriş-Sürüm bu değeri 14.

Burada benim durumumda TV yuvaları gereken ilk libs (çalışan 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

Evet 14 = ^ daha fazla . çok fazla =>hayır slot TV kaldı. Bu hata mesajı bize anlatmaya çalıştığı şey ve özellikle mathworks.

Hata ayıklama yapmadım C = lisans ihlal etmek için değil, ya da ikili deposunda bulunan sevk herhangi bir parçasını sökmeye derleme. kayıt için: Ben sadece MATLAB dinamik olarak yüklemek için libs kullanan ücretsiz ve açık Fedora 20 abone olarak giriş-ikili ayıklanacak.

Ne yapılabilir, bu sorunu çözmek için?

3 seçenek vardır:

(a) MATLAB ve dinamik olarak bu kütüphanelere yüklemeyin yeniden (başlangıç-exec tls modeli ile) yerine onlara karşı (daha sonra linker bağlantı gerekli yuva sayabilirsiniz!)

(b) Bu kütüphanelere yeniden ve ilk-exec tls modeli kullanarak DEĞİL emin olun.

(c) Abone olarak giriş ve artış DTV_SURPLUS yeniden abone olarak giriş//genel/ldsodefs sysdeps.h

(B) sadece mathworks tarafından yapılabilir açıkçası seçenekleri (a) ve.

Seçenek (c) versiyonunun hiçbir kaynağa ihtiyaç vardır ve böylece mathworks olmadan yapılabilir.

Mathworks durum nedir?

Gerçekten bunu açıklamaya çalıştı "Teknik Destek birimi". MathWorks Ama benim izlenimim, ' beni anlamıyorlar. Destek biletimi kapattılar ve bir telefon önerdi(!) teknik destek yöneticisi ile Ocak 2014 sohbeti.

Ben çok iyi Bu açıklar için elimden geleni yapacağım, ama dürüst olmak gerekirse: çok emin değilim.

Güncelleme (2014/01/10): şu Anda mathworks çalışıyor seçenek (b).

Güncelleme (2014/03/19): dosya libiomp5.yeni derlenmiş bir sürümü (statik TLS olmadan) mathworks, bug report 961964 adresinden indirebilirsiniz. Ve diğer libs? Gelişme yok. Almak için sürpriz olma "dlopen: statik TLS ile daha fazla nesne yüklenemiyor", örneğin bug report 1003952. "doc"

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Outler

    Adam Outler

    19 EKİM 2006
  • segtlim

    segtlim

    21 EKİM 2008
  • TantalizingTrance

    TantalizingT

    15 ŞUBAT 2009