2013-04-13 3 views
8

मैं एक सी स्रोत कोड से एक dll गतिशील पुस्तकालय बनाने के लिए इतना है कि मैं लोड और आर में उपयोग कर सकते हैं मैं अब उपयोग कर रहा हूँ चाहतेआर (विंडोज़) में सी से एक dll गतिशील पुस्तकालय बनाएं

R CMD SHLIB foo.c 

विंडोज 7 कमांड लाइन में। पर कुछ नहीं हुआ। कोई त्रुटि संदेश नहीं है लेकिन कोई डीएलएल फ़ाइल नहीं बनाई गई थी।

मैंने जो किया है उसके साथ क्या गलत है? धन्यवाद।

उत्तर

7

मुझे खेद है कि मेरा प्रश्न बहुत स्पष्ट नहीं है। लेकिन मैंने यह समझ लिया कि चीजें कैसे काम करें और संभावित गलतियों को कैसे प्राप्त करें। उम्मीद है कि यह किसी के लिए उपयोगी होगा। यहां दिए गए कदम हैं:

  1. इंस्टॉल करें आर (नवीनतम संस्करण 3.0.0 अब है)। R bin
  2. पर R bin फ़ोल्डर को जोड़ना सुनिश्चित करें Rtools Here का नवीनतम संस्करण स्थापित करें। "C: \ Rtools \ bin; c: \ Rtools \ gcc-4.6.3 \ bin;" को जोड़ना सुनिश्चित करें; " पथ को
  3. अपने सी कोड, foo.c
  4. में सहेजा विंडोज कमांड विंडो में, प्रकार

    आर सीएमडी SHLIB foo.c लिखें

तो आप एक foo.dll होना चाहिए फ़ाइल तो आप इसे आर में कॉल कर सकते हैं नोट करें कि 64 बिट्स आर के तहत बनाया गया foo.dll केवल 64 बिट्स आर में लोड किया जा सकता है। यदि आप 32 बिट्स आर में लोड करने का प्रयास करते हैं, तो आपको त्रुटि संदेश मिलेंगे।

+0

आप यह भी कोशिश कर सकते हैं: [टीडीएम-जीसीसी] (http://tdm-gcc.tdragon.net/), [सिगविन] (https://www.cygwin.com/), [msysGit] (https: //msysgit.github.io/) (केवल नेटइंस्टॉल), लेकिन Rtools बेहतर काम करता है! – DenisKolodin

2

वास्तव में आपका क्या मतलब है "कुछ नहीं हुआ"? क्या आपके रास्ते में आर है?

R --version क्या बताता है? R CMD config CC और R CMD config CFLAGS के बारे में कैसे?

अंत में, आप Rcpp स्थापित करता है, तो था (और अपने toolchain सही था, पथ सेटिंग्स और सभी बाकी सहित) आप के लिए उड़ान भरने एक ला

R> library(Rcpp) 
R> cppFunction('double foo(double x) { return std::sqrt(x); }') 
R> foo(4) 
[1] 2 
R> foo(4.2) 
[1] 2.04939 
R> unclass(foo) 
function (x) 
.Primitive(".Call")(<pointer: 0x7f251ba76530>, x) 
R> 

यहाँ हम cppFunction() इस्तेमाल किया (और एक पर बातें कर सकता है आरसीपीपी के अंदर चाल का गुच्छा) संकलित, लिंक और लोड करने के लिए एक सरल (और सुंदर बेकार ...) सी (++) फ़ंक्शन जो स्क्वायर रूट लेता है।

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