2011-01-04 13 views
5

सिस्टम: काला मैकबुक चल मैक ओएस एक्स 10.5.5 (तेंदुआ)सी ++ एसडीएल

मैं एक एसडीएल हैलो दुनिया केवल छ ++ का उपयोग कर आवेदन संकलित करने के लिए चाहते हैं। एक्सकोड मैकिंतोश के लिए अच्छा है लेकिन मुझे क्रॉस-प्लेटफार्म संगतता चाहिए, इसलिए मैं किसी कोका फ्रेमवर्क का उपयोग नहीं करूंगा (कोई मेनू नहीं, कोई बटन नहीं, आदि)। साथ ही, अन्य ओएस के लिए एक्सकोड परियोजनाओं को पोर्ट करना कुछ ऐसा नहीं है जो मजेदार लगता है। मैंने एसडीएल को/लाइब्रेरी/फ्रेमवर्क में डाउनलोड और स्थापित किया।

बड़ा सवाल यह है कि: मेकफ़ाइल में क्या होता है (स्रोत में केवल एक helloWorld.cpp फ़ाइल मानते हैं)। यदि संभव हो तो मैं here को Helloworld फ़ाइल को संशोधित करने से बचाना चाहूंगा।

उत्तर

5

मुझे इसे समझने के लिए थोड़ी देर लग गई, केवल मैं पहले से ही एसडीएल का उपयोग कर रहा था और शेर पर सी से सी ++ में संक्रमण कर रहा था। इसकी न सिर्फ makefile कि इस मुद्दे को यहाँ अपने शायद अपने स्रोत फ़ाइल है, साथ ही ...

डाउनलोड SDL- संस्करण .tar.gz

निकालें और शीघ्र

./configure --prefix=/home/user/SDL && make && make install 
में चला जो एक ही है

g++ Main.cpp -o Main `/home/user/SDL/sdl-config --cflags --libs` \ 
    -framework OpenGL -framework Cocoa 

:

मान लिया जाये कि सब कुछ वास्तव में बनाया, अब आप SDL-config को क्रियान्वित करते हुए अपने स्रोत का निर्माण करने के लिए उपयोग कर सकते

g++ Main.cpp -o Main -I/home/user/SDL/include \ 
    -L/home/user/SDL/lib -lSDLmain -lSDL -framework OpenGL -framework Cocoa 

के रूप में अब कुंजी यहाँ है कि आप सी ++ का उपयोग कर रहे हैं ... के लिए एसडीएल मैक्रो सही ढंग से अपने मुख्य बदलने के लिए, आप आप mangling मुख्य कार्य कॉल से C++ कम्पाइलर को रोकने के लिए की जरूरत है। इस की घोषणा करने के लिए अपने मुख्य जैसे निम्नलिखित:

extern "C" int main(int argc, char ** argv) 
{ 
} 

आप extern "सी" सामान शामिल नहीं है, तो सी ++ अपने मुख्य कार्य के नाम बदल जाएगा और एसडीएल स्वचालित रूप से करने के लिए सक्षम नहीं होगा इसे खोजें। यदि आप int मुख्य (int argc, char ** argv) फ़ंक्शन हस्ताक्षर का उपयोग नहीं करते हैं, तो C++ टाइप विसंगतियों के बारे में शिकायत करेगा ... इसलिए आपको इसे क्रियात्मक करना होगा।

Chenz

+0

+1 यह वास्तव में निराशा के घंटों के बाद मदद करता है मुझे g ++ - 4.8 के साथ संकलित करने के लिए एक सरल एसडीएल प्रोग्राम मिला। – mcheema

2

इस प्रयास करें:

all: helloWorld 

helloWorld: helloWorld.o 
    g++ -o helloWorld helloWorld.o `sdl-config --libs` 

helloWorld.o: helloWorld.cpp 
    g++ -c `sdl-config --cflags` helloWorld.cpp

SDL-config एक उपकरण स्थापित है कि जब एसडीएल के साथ संकलन के लिए उपयुक्त संकलक और लिंकर झंडे आउटपुट जो आपके एसडीएल के साथ आना चाहिए है।

+0

(जीसीसी का उपयोग कर, तो आप extern "सी" भाग को बाहर) केवल स्थापित ढांचे और नहीं एसडीएल config स्थापित करता है, और Macintosh पर SDL-config स्थापित करने अस्पष्ट है। –

+0

@ केविन कोस्टलान: क्षमा करें, मैंने सोचा कि आपने इसे यूनिक्स शैली स्थापित की है। आप अभी भी यह जानना चाहते हैं कि आप अपनी बिल्ड प्रक्रिया को अधिक पोर्टेबल बनाना चाहते हैं। मुझे लगता है कि ढांचे के साथ आप बस g ++ को संकलित कर सकते हैं helloWorld.cpp -framework एसडीएल-फ्रेमवर्क कोको –

+0

-framework या तो काम नहीं कर रहा है। मैंने सीधे एसडीएल संकलित किया (./configure; बनाना; स्थापित करें) लेकिन यह नहीं पता कि पर्यावरण चर जैसे पथ को सही तरीके से कैसे सेट किया जाए (इसलिए यह अभी भी शिकायत कॉन्फ़िगर नहीं है)। –

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