2011-11-22 16 views
7

के साथ मैक ओएस एक्स शेर पर एसडीएल सेट अप करना मैं काम करने के लिए एक सुपर सरल एसडीएल प्रोग्राम प्राप्त करने की कोशिश कर रहा हूं। मैं मैक ओएस एक्स शेर का उपयोग कर रहा हूँ। मुझे हिम तेंदुए में काम करने के लिए एसडीएल मिला है, लेकिन ऐसा लगता है कि शेर में काम करना नहीं चाहता है। अब तक मैं इस है:एक्सकोड 4

#include <iostream> 
#include "SDL/SDL.h" 

using namespace std; 

/* 
#ifdef main 
# undef main 
#endif 
*/ 

int main(int argc, char* args[]) 
{ 
    SDL_Surface* hello = NULL; 
    SDL_Surface* screen = NULL; 
    SDL_Init(SDL_INIT_EVERYTHING); 
    screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 
    hello = SDL_LoadBMP("hello.bmp"); 
    SDL_BlitSurface(hello, NULL, screen, NULL); 
    SDL_Flip(screen); 
    SDL_Delay(2000); 
    SDL_FreeSurface(hello); 
    SDL_Quit(); 

    return 0; 
} 

मुझे इस कोड (Xcode 4.1 में) यह मुझे इस त्रुटि देता है संकलन करने का प्रयास करें:

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     start in crt1.10.6.o 
    (maybe you meant: _SDL_main) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

मैं #ifdef सामान मैं वर्तमान में टिप्पणी की है uncomment हैं, कार्यक्रम संकलित करता है, लेकिन फिर एसडीएल_SetVideoMode लाइन पर SIGABRT प्राप्त करता है। मैंने उन चीजों पर टिप्पणी की जो मैंने अभी किसी अन्य कार्यक्रम में देखी है, मुझे यकीन नहीं है कि मुझे यह माना जाता है या नहीं।

मुझे यह कैसे काम करना चाहिए?

+0

क्या आप प्रोग्राम को संकलित/लिंक करने के लिए एक्सकोड द्वारा जारी आदेश प्रदान कर सकते हैं? (उस #ifdef सामान, बीटीडब्ल्यू से छुटकारा पाएं) –

+0

@ ब्रेटहेल मुझे यकीन नहीं है कि मुझे वह आदेश कैसे मिलेगा। यह सी ++ संपादन के साथ कमांड लाइन एप्लिकेशन टेम्पलेट से डिफ़ॉल्ट का उपयोग कर रहा है: सोचें मुझे यह मिला: http://pastebin.com/zprm01Kp – Cole

उत्तर

4

एसडीएल हेडर फाइलें मैक्रो के साथ main को फिर से परिभाषित करती हैं। यह SDL_main.h में है:

#define main SDL_main 

लेकिन यह ठीक है। एसडीएल अपना खुद का main() फ़ंक्शन प्रदान करता है जो तब आपके संस्करण को कॉल करता है। तो उन लोगों से छुटकारा पाएं, वे इसे और भी खराब कर रहे हैं, बेहतर नहीं।

यदि आपकी परियोजना कोको आधारित है, तो संभवतः आप अपनी परियोजना में SDLmain.m शामिल करने से चूक गए हैं। यह कोको अनुकूल main() फ़ंक्शन प्रदान करता है। यदि आपकी परियोजना देशी सी ++ है, तो मेरा अनुमान है कि आपने अपनी परियोजना में सभी एसडीएल libs शामिल नहीं किए हैं, इसलिए लिंकर एसडीएल के अपने main() को नहीं देख रहा है।

+0

मेरा प्रोजेक्ट सी ++ है। मैं देखता हूं कि #Dfine लाइन SDL_main.h में है। तुम्हारा क्या मतलब है कि मैंने सभी एसडीएल libs nuclide नहीं किया था? एसडीएल।एच, जिसे मैंने शामिल किया है, में कई अन्य एसडीएल हेडर फाइलें शामिल हैं, इसलिए मुझे जो चाहिए वह होना चाहिए। मैं और क्या आयात कर सकता हूं? हालांकि, मुझे ढांचे में कोई भी .cpp फ़ाइलें नहीं दिखाई देती हैं। – Cole

+0

एसडीएलएच एक हेडर फ़ाइल है, लाइब्रेरी नहीं। एसडीएल से कोड पुस्तकालय या ढांचे में संग्रहीत किया जाता है (इस पर निर्भर करता है कि आपने एसडीएल कैसे स्थापित किया है)। आपको परियोजना में पुस्तकालयों या ढांचे को जोड़ना होगा, ताकि लिंकर एसडीएल कोड प्राप्त कर सके। – Miguel

+0

अच्छा, मुझे लगता है कि मैंने ऐसा किया था। एक्सकोड के मेरे "बिल्ड चरण" टैब पर, मेरे पास "पुस्तकालयों के साथ लिंक बाइनरी" अनुभाग में एसडीएल.फ्रेमवर्क है। आयात एसडीएलएच केवल मेरे main.cpp में है। क्या मुझे कहीं और ढांचे को जोड़ना है? – Cole

1

SDL.h SDL_main.h शामिल नहीं है आपकी फ़ाइल में पहली पंक्ति होना चाहिए:

#include SDL_main.h 

SDL_main मुख्य कार्य को पुनर्परिभाषित करता है और फिर करता है अपने स्वयं के प्रारंभ के लिए आवश्यक है एसडीएल ओएस के साथ काम करने के लिए एक्स

जब संकलन, आप भी libSDL

+0

यह मेरे लिए कुछ भी नहीं बदलता है, लेकिन मैं वास्तव में libSDLmain को जोड़ने में समझ नहीं पा रहा हूं। मैं एक ढांचे का उपयोग कर रहा हूँ (मैक ओएस 10.7), और इसके अतिरिक्त मेरे एसडीएलएच में SDL_main.h शामिल है। – Cole

2

के अलावा libSDLmain में लिंक करने के लिए एसडीएल ढांचे आप बस अपनी परियोजना के लिए फ़ाइलों को SDLMain.h और SDLMain.m जोड़ने की जरूरत उपयोग कर रहे हैं (यह मानते हुए की आवश्यकता होगी y कहां पहले से ही आपके प्रोजेक्ट में एसडीएल.फ्रेमवर्क जोड़ा है)।

आप एसडीएल diskimage, जिसे आप यहां डाउनलोड कर सकते हैं की "devel-लाइट" फ़ोल्डर में इन फ़ाइलों को पाते हैं: http://www.libsdl.org/release/SDL-1.2.15.dmg

इन दो फ़ाइलें आप एक कोको के अनुकूल है मुख्य दिनचर्या दे देंगे, तो आपके एसडीएल अनुप्रयोग है कि एक अच्छी तरह से व्यवहार ओएस एक्स आवेदन हो सकता है।

0

मैं एक शुद्ध सी ++ & ओपन अनुप्रयोग के लिए ओ पी के रूप में ही लिंक टाइम त्रुटि थी, और समाधान से https://github.com/Ricket/HelloSDL

नमूना परियोजना का इस्तेमाल किया गया यह मैं कोको पुस्तकालयों को जोड़ने की है लेकिन है कि would have been needed anyway के बाद से मैं को लक्षित किया गया था दी आईफोन।