2011-03-15 17 views
10

मैं पैकेज बनाने के लिए आरसीपीपी का उपयोग करके आर पैकेज में ओपनसीवी से कुछ कोड का उपयोग करने की कोशिश कर रहा हूं। जब मैं अपनी मशीन पर सी कोड संकलित करता हूं, तो यह ठीक काम करता है।जब मैं पैकेज में उपयोग किए जाने वाले सी ++ कोड को संकलित कर रहा हूं तो मैं आर को झंडे कैसे पास कर सकता हूं?

उदाहरण के लिए, मैं निम्न सिंटैक्स का उपयोग कर रहा स्थानीय स्तर पर facedetect.cpp कोड संकलित करने के लिए:

g++ `pkg-config --cflags opencv` facedetect.cpp -o facedetect `pkg-config --libs opencv` 

हालांकि, जब मैं निम्न आदेश का उपयोग कर अपने पैकेज में शामिल करने का प्रयास करें:

R CMD SHLIB facedetect.cpp -o facedetect 

साथ निम्नलिखित मेरी makevars फाइल में परिभाषित:

PKG_CPPFLAGS= `$(R_HOME)/bin/Rscript -e 'Rcpp:::CxxFlags()'` 
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"` 
PKG_CXXFLAGS= `pkg-config --cflags opencv` `pkg-config --libs opencv` 

आर वें कार्यान्वित ई निम्नलिखित:

g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 `pkg-config --cflags opencv` `pkg-config --libs opencv` `/Library/Frameworks/R.framework/Resources/bin/Rscript -e 'Rcpp:::CxxFlags()'` -I/usr/local/include -fPIC -g -O2 -c facedetect.cpp -o facedetect.o 

जो मुझे निम्न त्रुटि संदेश देता है:

i686-apple-darwin10-g++-4.2.1: -lopencv_core: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_imgproc: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_highgui: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_ml: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_video: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_features2d: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_calib3d: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_objdetect: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_contrib: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_legacy: linker input file unused because linking not done 
i686-apple-darwin10-g++-4.2.1: -lopencv_flann: linker input file unused because linking not done 
g++ -arch x86_64 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup  -single_module -multiply_defined suppress -L/usr/local/lib -o facedetect facedetect.o -I/opt/local/include/opencv -I/opt/local/include -L/opt/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation 

मैं, ये त्रुटि संदेश समझ में नहीं आता है क्योंकि मैं सी के साथ पर्याप्त अनुभव नहीं है ++। क्या कोई जानता है कि सी ++ कोड को संकलित करने के लिए आर को कैसे प्राप्त करें क्योंकि मेरे स्थानीय जी ++ कंपाइलर करता है? मुझे यकीन नहीं है कि "-c" ध्वज समस्या है ... दुर्भाग्यवश मुझे Google या Writing R एक्सटेंशन मैन्युअल के माध्यम से उत्तर नहीं मिला। धन्यवाद!

पिछले उत्तरदाताओं के लिए धन्यवाद जिन्होंने मुझे झंडे के साथ शुरुआती समस्याओं का पता लगाने में मदद की।

+0

आपका शीर्षक सी ++ कहता है, लेकिन सवाल सी कहता है, यह कौन है? – Puppy

+0

यह सी ++ है, धन्यवाद। – Solomon

उत्तर

4

आप अपने src निर्देशिका में एक Makevars -File रख दिया और PKG_CPPFLAGS (पूर्वप्रक्रमक & भी शामिल है) और PKG_CXXFLAGS (संकलक झंडे) निर्दिष्ट करने की आवश्यकता। विवरण "लेखन आर एक्सटेंशन" में खंड 1.2.1 और 5.5 में हैं।

PKG_LIBS = `pkg-config --libs opencv` 
PKG_CFLAGS = `pkg-config --cflags opencv` 
PKG_CXXFLAGS = `pkg-config --cflags opencv` `Rscript -e 'Rcpp:::CxxFlags()'` 
PKG_CFLAGS = `pkg-config --cflags opencv` 

आशा इस मदद करता है:

+2

सही, और यदि आपको इस पोर्टेबल की ज़रूरत है तो आपको 'autoconf' et al के माध्यम से 'कॉन्फ़िगरेशन' स्क्रिप्ट को देखना होगा। –

+0

धन्यवाद, हालांकि दुर्भाग्य से अब मुझे नई समस्याएं हैं जो मुझे समझ में नहीं आती हैं ... – Solomon

+0

यदि श्रीमान। eddelbuettel यहां जवाब नहीं देता है, आरसीपीपी मेलिंग सूची (https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel) पर पोस्ट करने का प्रयास करें, आपके पास एक बड़ा होगा वास्तव में सक्षम लोगों से जवाब प्राप्त करने का मौका। – fabians

3

यह एक Makevars फ़ाइल है कि वास्तव में मेरे लिए काम किया है।

+4

आपके पास 'PKG_CFLAGS' क्यों दो बार है? – asmeurer

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

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