2013-03-03 5 views
12

पर ओपनसीएल संकलित करें क्या मिंगव और एनवीडिया एसडीके का उपयोग करके ओपनसीएल को संकलित करना संभव है?मिंगव एनवीडिया एसडीके

मुझे पता है कि इसकी आधिकारिक तौर पर समर्थित नहीं कर रहा हूँ, लेकिन यह सिर्फ मतलब नहीं है। एक स्थिर रूप से जुड़े पुस्तकालयों के रूप में प्रदान पुस्तकालयों नहीं हैं? मेरा मतलब है कि जो भी संकलक हो सकता है, और सफलतापूर्वक लिंक किया गया है, समस्या क्या होनी चाहिए?

मैं संकलन और सफलतापूर्वक एनवीडिया के एसडीके के साथ प्रदान की OpenCL पुस्तकालयों के लिए मेरी कोड लिंक करने में कामयाब रहे, हालांकि निष्पादन फेंकता clGetPlatformIDs पर विभाजन दोष जो मेरे कोड में पहले OpenCL कॉल है।

यहाँ मेरी संकलन आदेश

x86_64-w64-mingw32-g++ -std=c++11 File.cpp \ 
-L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\x64" \ 
-I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" \ 
-gcoff -lOpenCL -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 \ 
-lshell32 -lole32 -loleaut32 \ 
-luuid -lodbc32 -lodbccp32 -luser32 -lgdi32 -lmingwex -m64 \ 
-DWIN32 -D_DEBUG -D_CONSOLE 

ध्यान दें कि इन पुस्तकालयों नमूना OpenCL कोड की .sln फ़ाइल से ले जाया गया है।

मैंने इन पुस्तकालयों के विभिन्न संयोजनों की कोशिश की और कुछ भी काम नहीं कर रहा है।

इसके अलावा कुछ और का उपयोग कर Mingw और लिंक का उपयोग कर संकलित करने के लिए एक तरीका है? मुझे यकीन नहीं है कि कुछ और क्या हो सकता है।

+0

होस्ट कोड बनाने के लिए आप वीसी ++ एक्सप्रेस का उपयोग क्यों नहीं करते? क्या आप 32 बिट या 64 बिट libs का उपयोग कर रहे हैं? CUDA \ v5.0 \ lib \ x64 और -luse32 -lcomdlg32 -ladvai32 का एक भ्रमित मिश्रण है ... -m64 ये सभी libs आवश्यक हैं? अपनी कमांड लाइन को सरल बनाएं। –

+1

64-बिट, मेरा सी ++ कोड सी ++ 11 फीचर्स का उपयोग करता है, इसलिए वीसी ++ नहीं जाता है। मैंने libs, मृत अंत को हटाने और जोड़ने की कोशिश की। – omarzouk

उत्तर

12

हम MinGW reimp और उपयोगिताओं dlltool "OpenCL.dll" DLL के लिए एक आयात पुस्तकालय "libOpenCL.a" बनाने के लिए का उपयोग करके ऐसा करने में सक्षम है। यहाँ कदम हम पीछा कर रहे हैं:

  • चरण 1: सुनिश्चित करें कि आप MinGW-utils स्थापित (reimp और dlltool के लिए) किया है। यदि आप करते हैं नहीं, एक MinGW शीघ्र, प्रकार है:

    स्थापित MinGW-मिल MinGW-utils

  • चरण 2:

    reimp OpenCL.lib

  • : इसके बाद, निम्न आदेश टाइप

यह एक OpenCL.def और libOpenCL.a फ़ाइल उपज चाहिए। यदि परिणाम "अमान्य या भ्रष्ट आयात लाइब्रेरी" के आधार पर कुछ है, तो वैकल्पिक चरण 2 को काम करना चाहिए।

  • वैकल्पिक चरण 2: एक साथ dlltool का उपयोग करें कि आप यहां पा सकते हैं एक .def फ़ाइल के साथ: http://pastebin.com/f2ac38b2f। आदेश हो जाता है:

    dlltool -l libOpenCL.a -d OpenCL.def -एक -k

अब आप नव निर्मित libOpenCL.a के खिलाफ लिंक कर सकते हैं। यदि आप अभी भी गायब प्रतीकों को देखते हैं, तो उन्हें .def फ़ाइल में जोड़ें और dlltool कमांड दोहराएं।

  1. http://oscarbg.blogspot.com/2009/12/opencl-with-mingw.html
  2. http://www.mingw.org/wiki/CreateImportLibraries (मैं केवल 2 लिंक पेस्ट कर सकते हैं)
+0

पुष्टि की है कि यह आपको कम से कम GPU कंप्यूटिंग एसडीके 5.5 के साथ लिंक करने की अनुमति देता है। – imallett

2

OpenCL:

हम संदर्भ के लिए जानकारी निम्न पदों में पाया करने के लिए यह सब काम कर धन्यवाद प्राप्त करने में सक्षम थे लाइब्रेरी केवल OpenCL.dll पर स्टब्स हैं। इसलिए मैं एक गतिशील लोडिंग तकनीक का उपयोग कर सिफारिश करता हूं।यह आपकी सभी समस्याओं को हल करेगा। या क्या आपको वास्तव में ओपनसीएल के कुछ एनवीआईडीआईए बदलावों की आवश्यकता है?

यह रनटाइम पर केवल सुरक्षित नहीं है, बल्कि संकलन करने में भी आसान है क्योंकि आपको कोई लिंकर की आवश्यकता नहीं है और न ही परिभाषित करता है, न ही कुछ भी। बस एक साधारण सीपीपी/एचपीपी फाइलें आपके प्रोजेक्ट में जोड़े गए।

उपयोग करने के लिए बहुत अच्छा एक CLEW है। हालांकि मैं पूरी तरह से उस पुस्तकालय से सहमत नहीं हूं, क्योंकि सी ++ रैपर टूट गए हैं। तो शायद आपको कुछ tweaking की आवश्यकता होगी। इसके अलावा मैं आमतौर पर "atexit" कोड अक्षम करता हूं, क्योंकि यह समस्याग्रस्त हो सकता है।

+0

साफ़ लगता है मृत? – rogerdpack

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