2012-09-01 39 views
12

के लिए बिल्डिंग ग्लेड मैंने अपने सरल इंजन को मैक पर काम करने के लिए संघर्ष करने का दिन बिताया है। मेरे पास एसडीएल काम कर रहा है और अब परेशानी देने वाली एकमात्र चीज ओपनजी है। इंजन आधुनिक opengl (शेडर आधारित) का उपयोग करता है और इसलिए GLEW की आवश्यकता होती है। मैंने इसे इंस्टॉल करने के लिए फ़िंक से मैकपॉर्ट्स तक सब कुछ करने की कोशिश की है और कुछ भी काम नहीं करता है।मैक ओएसएक्स

मेरे पास सबसे अधिक सफलता स्रोत से बना रही है। सबसे पहले मुझे 'GL/glu.h' no such file or directory found. कहने में त्रुटि मिली, इसलिए मैंने इसका नाम बदलकर OpenGL/glu.h किया और उस समस्या को ठीक किया। लेकिन अब मुझे यह त्रुटि मिली है ld: unknown option: -shared मैं इस बिंदु पर पूरी तरह से अटक गया हूं।

अगर आईडी जानता है कि यह कैसे करना है तो आईडी भी एक स्थिर निर्माण है।

+0

मै मैक्सपोर्ट, फ़िंक, होमब्रू जैसे बंदरगाह सिस्टम का उपयोग करने का सुझाव दूंगा क्योंकि लेखक ओएसएक्स को बिल्ड प्रक्रिया को पोर्ट करने का काम करेंगे। इस मामले में ओएसएक्स लिंकर समझ में नहीं आता है- साझा किया गया है, इसलिए आपको इसकी समतुल्यता का उपयोग करने की आवश्यकता है और कई अन्य समस्याएं – Mark

+0

होगी जैसा कि मैंने कहा था कि मैंने मैकपोर्ट्स का उपयोग किया था और कहा था कि यह सफल हुआ है लेकिन कुछ भी इंस्टॉल नहीं किया गया है – Constan7ine

+1

'सुडो पोर्ट इंस्टॉल करें' एक त्रुटि के रूप में देते हैं? – Mark

उत्तर

11

इंजन आधुनिक ओपन (शेडर आधार पर) का उपयोग करता है और इसलिए आवश्यकता है Glew

Glew आधुनिक ओपन सुविधाओं का उपयोग कर के लिए एक शर्त नहीं है। यह विस्तारित कार्यक्षमता लोड करने के लिए विधि है, केवल एक नहीं है। आप मैकोज़ एक्स पर हैं, इसलिए एक्सटेंशन सिस्टम आपके लिए बहुत कम उपयोग है, क्योंकि ओपनजीएल संस्करण समर्थित ओएस और उपलब्ध ढांचे द्वारा पूरी तरह से निर्धारित किया जाता है। ऐप्पल ओपनजीएल ड्राइवरों को स्वयं विकसित करता है और वे जो एक्सटेंशन प्रदान करते हैं वे केवल वे हैं, जो ओपनजीएल विनिर्देश (यानी विक्रेता विशिष्ट और EXT) में नहीं मिली सुविधाओं के लिए हैं। आपको केवल ओपनजीएल फ्रेमवर्क का एक संस्करण पर्याप्त है। 2006 के बाद जारी किए गए किसी भी मैकोज़ एक्स को यह कर सकता है।

+1

ओएल एक्स पर संकलित करने के लिए जीएलईडब्लू सहित एक प्रोग्राम कैसे पोर्ट किया जाएगा? – Efren

+2

@Efren: '__APPLE__' प्रीप्रोसेसर मैक्रो के लिए जांचें और केवल तभी यदि उसे परिभाषित नहीं किया गया है तो GLEW हेडर शामिल है। और मामले के लिए '__APPLE__' परिभाषित किया गया है, परिभाषित (रिक्त) मैक्रोज़ जो 'glew ...' फ़ंक्शन को नो-ऑप्स में बदलता है। – datenwolf

+0

तो जब GLEW शीर्षलेख शामिल नहीं है, तो कौन से सेब हेडर उपलब्ध है? मेरा मतलब है, पुराना कार्यक्रम वास्तव में उन कार्यों को बुला रहा है। – Efren

3

मैं Glew का उपयोग कर स्रोत से का उपयोग कर स्थापित किया है:

बनाने GLEW_DEST = "$ HOME/स्थानीय" ऑप्ट = "- मार्च = core2 -O2" install.all

आपका अनुकूलन और स्थलों भिन्न हो सकते हैं। यह $HOME/local/lib में libglW.a, libGLEWmx.a, और उनके dylib समकक्ष उत्पन्न करता है। pkgconfig उप-निर्देशिका में glew.pc भी शामिल होगा। GLEW हमेशा दूसरों के साथ अच्छी तरह से खेल नहीं करता है। glewExperimental की तरह वैश्विक सेट करने के लिए, साथ ही जरूरत के अन्य हेडर के शामिल किए जाने के आदेश के साथ सावधान रहना होगा: <OpenGL/gl3.h> या <glfw.h>, आदि

मैं कुछ सलाह की पेशकश कर सकते हैं - आधुनिक जीएल प्रोग्रामिंग के लिए भूल जाते हैं एसडीएल। यदि आप शुद्ध, ओएस एक्स पर आधुनिक जीएल में जाना चाहते हैं। "- मार्च = core2 -O2" बनाने कोको cocoa-

> env PREFIX = "$ HOME/स्थानीय" CFLAGS =:

#if defined (__APPLE_CC__) 
#include <OpenGL/gl3.h> 
#else 
#include <GL/gl3.h>  /* assert OpenGL 3.2 core profile available. */ 
#endif 

#define GLFW_INCLUDE_GL3 /* don't drag in legacy GL headers. */ 
#define GLFW_NO_GLU  /* don't drag in the old GLU lib - unless you must. */ 

#include <GL/glfw.h>  /* simple and easy to use. omit legacy GL. */ 

स्थापित कर रहा है GLFW सुंदर भी आसान है: - की तरह कुछ पर विचार

फिर से, आपकी सेटिंग्स भिन्न हो सकती हैं।


20160412: एसडीएल के बारे में मेरी टिप्पणियां पुरानी हैं, जैसा कि अन्य ने बताया है। विशेष रूप से यदि आप अभी तक एक और इंजन पर काम कर रहे हैं। मैं यह मानता हूं कि glfw3 ओएसएक्स पर आधुनिक ओपनजीएल ऐप्स बनाने का एक आसान तरीका है। जीएल और इवेंट हैंडलिंग पर एक (सही ढंग से!) संकीर्ण ध्यान के साथ, यह बहुत अच्छी तरह से लिखित और रखरखाव कोड है। जाहिर है, एक 'इंजन' परिप्रेक्ष्य से, एसडीएल 2 पोर्टेबल विस्तारित वीडियो एपीआई, ऑडियो एपीआई, थ्रेड एपीआई इत्यादि प्रदान कर रहा है। हालांकि सी 11 और सी ++ 11 के साथ, यहां तक ​​कि एक थ्रेड एपीआई अबास्ट्रक्शन लेयर शायद अनावश्यक है।

GLEW उसमें समस्याग्रस्त है जिसमें व्यापक उपयोगकर्ता हस्तक्षेप के बिना कई संदर्भों को संभाल नहीं सकता है। यह ओएसएक्स के लिए कोई मुद्दा नहीं है, जो एक कोर प्रोफाइल एपीआई प्रदान करता है और 'फ़ंक्शन पॉइंट' लोड करने की आवश्यकता नहीं है। आईआईआरसी, जीएल (डीआरआई?) पर जीएल भी है - लेकिन मैं इसके बारे में गलत हो सकता हूं। वहाँ अन्य लोडर हैं। मैं अभी भी उन सभी पर शासन करने का इंतजार कर रहा हूं, जो सुनिश्चित करता है कि यदि आवश्यक हो तो विभिन्न फ़ंक्शंस पॉइंटर्स को कई संदर्भों के लिए लोड किया जाता है, और सही प्रेषण के लिए थ्रेड-लोकल (या यहां तक ​​कि एक पर्थ्रेड कुंजी) का उपयोग करता है, जिसे नवीनतम ग्लैंक से उत्पन्न किया जा सकता है Khronos, या जो कोई भी से .xml ...

+6

"आधुनिक ओपनजीएल प्रोग्रामिंग के लिए एसडीएल भूल जाना" की आवश्यकता है। यह टिप्पणी अब पुरानी है। एसडीएल 2 आपको ओपनजीएल संदर्भ के संस्करण को निर्दिष्ट करने देता है। –

+1

ओपनजीएल और एसडीएल का उपयोग करने वाले शौक परियोजना पर काम करने वाले व्यक्ति के रूप में, ओपनजीएल परिदृश्य की अच्छी समझ विकसित करना मुश्किल है। मैं ओपनजीएल के साथ एसडीएल 2 का उपयोग कर रहा हूं, और पहली बार शेडर्स लोड करने की कोशिश कर रहा हूं। हालांकि, यह कहना मुश्किल है कि ओपनजीएल का कौन सा संस्करण मैं भी उपयोग कर रहा हूं। क्या आप (@mlabbe या अन्यथा) किसी भी संसाधन का सुझाव दे सकते हैं जो इससे मदद करेगा? ज्यादातर मुझे संकीर्ण ट्यूटोरियल मिलते हैं। – michaelgulak

+0

मैं ओपन जीएल सुपरबिबल के संशोधन की अनुशंसा करता हूं जो ओपनजीएल के संस्करण से मेल खाता है जिसे आप लक्षित कर रहे हैं। यह कोर प्रोफाइल पर केंद्रित है, जो विरासत कॉल को समाप्त करता है। यह यादृच्छिक रूप से Googling से कहीं अधिक प्रभावी है। http://docs.gl/ संस्करणों के लिए कॉल मिलान के लिए भी उपयोगी है। –

4

MacPorts आप के लिए उन पुस्तकालयों और उनकी निर्भरता स्थापित मिलना चाहिए:

sudo port install glew +universal 
sudo port install libsdl +universal 

जब अपने खेल का निर्माण, यह छ दोनों के निर्माण और जोड़ने चरणों के लिए ++ कॉल करने के लिए सबसे अच्छा है ; MacPorts द्वारा स्थापित किए गए शीर्षलेख और पुस्तकालयों को ढूंढने के लिए आपको केवल /opt/local का संदर्भ देना होगा। तुम भी यदि आप चाहें तो स्थिर-लिंक कर सकते हैं .एक फ़ाइलें:

g++ -c -O3 -I/opt/local/include main.cpp -o main.o 
g++ main.o /opt/local/lib/libSDL.a /opt/local/lib/libSDLmain.a /opt/local/lib/libGLEW.a -o mygame 

आप कमांड लाइन से निर्माण कर रहे हैं, मैं using a Makefile and building with make सलाह देते हैं।

20

आप आप के लिए काम करने के लिए Homebrew उपयोग कर सकते हैं:

brew install glew 
+2

फिर क्या? मैं इसके लिए बिल्कुल नया हूं और मैं यह काम करने की कोशिश कर रहा हूं। स्थापना पूरी हो गई, लेकिन मैं अभी भी इसके बारे में अनजान हूं कि आगे क्या करना है। –

+0

http://stackoverflow.com/a/17601607/5442132 – miqdadamirali

+0

@RafaelEyng इसके बाद अपना कोड 'main.cpp' में लिखें, फिर' clang ++ main.cpp -lGLEW -framework OpenGL -o '(और यदि आप अन्य पुस्तकालयों का उपयोग करते हैं तो आप '-lglfw3 -framework कोको-फ्रेमवर्क ओपनजीएल-फ्रेमवर्क IOKit -framework CoreVideo' जोड़ सकते हैं)। –

2

मैं http://glew.sourceforge.net के लिए जा रहा है और अपने मैक पर दाएँ ज़िप फ़ाइल डाउनलोड करने की सिफारिश करेंगे। फिर खोजक में जाएं और फ़ाइल देखने के लिए glew.h टाइप करें, इसे क्लिक करें, जानकारी प्राप्त करें, और फ़ाइल को पथ कॉपी करें। फिर अपने-अपने प्रोग्राम फ़ाइल (जैसे, commons.h) कि #include <GL/glew.h> निर्भरता शामिल में जाते हैं, और के लिए इसे बदल:

#include <path/to/file/that/you/just/copied/glew.h> 

फिर, अपने कार्यक्रम फिर से संकलित करने के लिए प्रयास करते हैं, और इस समय आप किसी भी Glew नहीं मिलना चाहिए त्रुटियों।

0

उपर्युक्त उत्तरों में से कोई भी मुझे वह नहीं दिया जो मैं ढूंढ रहा था: एक स्थिर ग्लेव निर्भरता के साथ सेटअप करने के लिए एक त्वरित तरीका और एक्सकोड परियोजना। यहाँ http://glew.sourceforge.net/

  • प्रकार

    $sudo make install 
    

    अनज़िप निर्देशिका से से

    1. डाउनलोड Glew स्रोत (इस .dylib स्थापित करता है अगर आप गतिशील रूप से लिंक करना चाहते हैं)। आपको सीएमके स्थापित करना होगा।

    2. कॉपी ए स्थिर पुस्तकालय से/usr/स्थानीय/lib/अपने XCode प्रोजेक्ट
    3. अपडेट "हैडर खोजें पथ" अपने लक्ष्य हैडर शामिल करने के लिए अपने Xcode निर्माण सेटिंग में करने के लिए (आमतौर पर/में रखा usr/स्थानीय/शामिल हैं)। या सिर्फ हेडर को अपनी परियोजना पर कॉपी करें।