2016-05-02 12 views
11

पर पहुंच गई है, मैं एक आर पैकेज लिख रहा हूं जो कई अन्य पैकेजों पर निर्भर करता है।त्रुटि: डीएलएल की अधिकतम संख्या

Error in dyn.load(file, DLLpath = DLLpath, ...) : 
    unable to load shared object '/Library/Frameworks/R.framework/Versions/3.2/Resources/library/proxy/libs/proxy.so': 
    `maximal number of DLLs reached... 

इस पोस्ट Exceeded maximum number of DLLs in R ने बताया कि इस मुद्दे को आधार आर कोड की Rdynload.c साथ है: #define MAX_NUM_DLLS 100

वहाँ है जब मैं सत्र में भी कई संकुल लोड मैं अक्सर यह त्रुटि आई स्रोत से संशोधन और निर्माण को छोड़कर इस मुद्दे को बाईपास करने का कोई तरीका?

+0

क्या आपने माइक्रोसॉफ्ट आर का उपयोग करने की कोशिश की है? मुझे यकीन नहीं है कि काम करेगा, लेकिन यह एक व्यवहार्य विकल्प हो सकता है। – hrbrmstr

+0

मैंने अभी माइक्रोसॉफ्ट आर के स्रोत कोड की जांच की है। मुझे नहीं लगता कि उन्होंने '#define MAX_NUM_DLLS 100' कोड बदल दिया है। इसके अलावा कुछ संकुल जिन्हें संकलन की आवश्यकता है, स्थापित नहीं किया जा सकता है। –

उत्तर

11

उस संख्या को बढ़ाने के लिए "संभव" है ... लेकिन यह थोड़ा (आर की निश्चित स्मृति पदचिह्न में जोड़ना) भी खर्च करता है।

मैंने उस सीमा को सेट नहीं किया है, लेकिन मुझे पूरा यकीन है कि इसका उपयोग आर के लिए अनुस्मारक के रूप में भी किया गया था, उसके आर सत्र में थोड़ा "साफ" करने के लिए, यानी पैकेज नामस्थानों को अनावश्यक रूप से लोड नहीं किया गया था। मैं अभी तक कल्पना नहीं कर सकता कि आपको 100 पैकेज चाहिए आपके आर सत्र में नामित नामस्थान। ओटीओएच, आजकल कुछ पैकेजों में निर्भरताएं हैं, इसलिए मैं मानता हूं कि कम से कम अतीत की तुलना में यह गलती से अधिक बार हो सकता है।

पाठ्यक्रम का वास्तविक समाधान एक कोड सुधार होगा जो "डीएलएलइन्फो" संरचनाओं (अपेक्षाकृत 32) की अपेक्षाकृत छोटी संख्या के साथ शुरू होता है, और फिर आवश्यक होने पर अधिक बैचों (आकार 32 का आकार) आवंटित करता है।

आर स्रोतों के लिए पैच (https://svn.r-project.org/R/trunk/ पर उपversण में विकास ट्रंक) बहुत स्वागत है!

---- जनवरी 26, 2017 जोड़ा गया: इस बीच, हमारे पास public bug report है, इसके बारे में एक प्रस्तावित पैच (जो पर्याप्त नहीं था: हमेशा ओएस पर निर्भर करता है खुला फ़ाइलें), और आज कि बग रिपोर्ट आर कोर सदस्य @TomasKalibera जो नए कोड जहां लोड DLLs की अधिकतम संख्या विंडोज और लिनक्स (और अभी तक जांच नहीं की पर

pmax(100, pmin(1000, 0.6* OS_dependent_getrlimit_or_equivalent()))

पर सेट और इतने है कार्यान्वित द्वारा बंद कर दिया गया , लेकिन "लगभग निश्चित रूप से" मैकोज़), सीमा पहले की तुलना में काफी अधिक होनी चाहिए।

----- अपडेट # 2 (लिखित जनवरी 5, 2018):
अक्टूबर 17 में, उपर्युक्त परिवर्तन स्रोतों के निम्नलिखित प्रतिबद्धता के साथ अधिक स्वचालित बना दिया गया था (आर के विकास संस्करण के - केवल!)

r73545 | kalibera | 2017-10-12 14:41:20

Increase the number of DLLs that can be loaded by default. If needed, increase the soft limit on open files.

और सहायता पृष्ठ ?dyn.load (https://stat.ethz.ch/R-manual/R-devel/library/base/html/dynload.html) ulimit -n <num_open_files> पर अब बताया गया है (खंड नोट पास नीचे करने के लिए)।

तो आप अप्रैल के "मुख्य धारा" बनने तक आर के विकास संस्करण का उपयोग करने पर विचार कर सकते हैं।
वैकल्पिक रूप से, आप (एक टर्मिनल/खोल में) कर

ulimit -n 2048

और फिर उस टर्मिनल से आर शुरू करते हैं। टॉमस कालिबेरा ने मैकोज़ पर काम करने के लिए इसका उल्लेख किया।

+0

आर कोर टीम MAX_NUM_DLLS को 200 या तो बंप करने के लिए खुली होगी? या यहां आंखों से मिलने से कहीं ज्यादा है? मैं आर पैकेज एमएलआर पर काम कर रहा हूं और हम सभी शिक्षार्थियों के लिए यूनिट परीक्षण करते समय इस समस्या में भाग लेते हैं –

+0

हां, थोड़ा और है .. आर-डेवेल मेलिंग सूची पर धागे देखें, उदाहरण के लिए देखें मेरी हालिया पोस्ट https://stat.ethz.ch/pipermail/r-devel/2016- दिसम्बर/073529.html (और इसके आसपास के संदेश)। मुझे उम्मीद है कि हमारे पास आर 3.4.0 सीए अप्रैल 1717 से कुछ है (और यदि आप आर –

+0

के विकास संस्करण के साथ काम करने के इच्छुक हैं तो थोड़ा सा जल्द ही एक ही समस्या है - कई निर्भरताओं के साथ एक पैकेज कोडिंग कर रहा था, और अब मुझे यह त्रुटि भी मिल रही है ... –

9

आर 3.4 के रूप में, आप डीएलएल की एक अलग अधिकतम संख्या और पर्यावरण परिवर्तनीय R_MAX_NUM_DLLS का उपयोग कर सेट कर सकते हैं।रिलीज नोट्स से:

The maximum number of DLLs that can be loaded into R e.g. via dyn.load() can now be increased by setting the environment variable R_MAX_NUM_DLLS before starting R.

+0

इसे वैश्विक स्तर पर सेट करने के लिए, इसे नवीनीकरण या Renviron.site में जोड़ा जाना चाहिए? –

+0

'स्टार्टअप' देखें, या Google आर के लिए स्टार्टअप कॉन्फ़िगरेशन का वर्णन करने वाले कई संदर्भ देता है, उदा। [आर के स्टार्टअप को समझना] (https://rviews.rstudio.com/2017/04/19/r-for-enterprise-understanding-rs-startup/) –

4

मैं तुम्हें अधिक नहीं हो सकता BioConductor

MacOS पर में simpleSingleCell पुस्तकालय के साथ इस मुद्दे था 256. तो मैं अपने घर dir में मेरी .Renviron सेट R_MAX_NUM_DLLS = 150

+0

लगता है कि मैकोज़ पर वास्तविक सीमा 153 है अन्यथा आर 3.4 घातक फेंक देगा त्रुटि। –

-1

यह वातावरण चर करने के लिए आसान जाओ और संपादित

Variable name = R_MAX_NUM_DLL 
Value = 1000 

पुनः प्रारंभ आर worke डी मेरे लिए अच्छा

संबंधित मुद्दे