2008-12-28 10 views
7

मैं विजुअल स्टूडियो 2008 एक्सप्रेस के साथ सी ++ में एसडीएल का उपयोग करने की कोशिश कर रहा हूं। निम्नलिखित कार्यक्रम संकलित लेकिन लिंक नहीं करता है:दृश्य स्टूडियो 2008 एक्सप्रेस में संकलित और लिंक करने के लिए आपको न्यूनतम एसडीएल प्रोग्राम कैसे मिलता है?

#include <SDL.h> 

int main(int argc, char *argv[]) 
{ 
    return 0; 
} 

लिंक त्रुटि है:

LINK : fatal error LNK1561: entry point must be defined 

मैं यह कैसे या अगर मैं SDL.lib और SDLmain.lib के साथ लिंक की परवाह किए बिना मिलता है। main को main() या SDL_main() परिभाषित करना extern "C" के साथ या बिना एक ही त्रुटि देता है।

संपादित करें: मैंने इसे मुख्य सीपीपी में एसडीएलएच सहित शामिल नहीं किया - एक रिफैक्टरिंग मैंने समस्या से स्वतंत्र किया। फ़ंक्शन को परिभाषित करने से ठीक पहले एक समान समाधान #undef main होगा।

उत्तर

6

मेरे पास इस समय वीसी ++ उपलब्ध नहीं है, लेकिन मैंने इस मुद्दे को कई बार देखा है।

आपको कंसोल प्रोजेक्ट के विपरीत Win32 प्रोजेक्ट बनाने की आवश्यकता है। एक Win32 प्रोजेक्ट एक प्रोग्राम प्रविष्टि बिंदु के रूप में WinMain फ़ंक्शन की अपेक्षा करता है। SDLmain.lib में यह प्रविष्टि बिंदु होता है और SDL_main.h शीर्षलेख फ़ाइल में एक मैक्रो होता है जो आपके मुख्य फ़ंक्शन को SDL_main पर रीमेप्स करता है। एसडीएलमेन लाइब्रेरी में एंट्री पॉइंट द्वारा इस फ़ंक्शन को कॉल किया जाता है।

मुख्य कार्य निम्नलिखित हस्ताक्षर होना चाहिए:

int main(int argc, char *argv[]) 

यह भी अपने मुख्य कार्य की घोषणा से पहले SDL.h शामिल करने के लिए आवश्यक है, और आप दोनों SDL.lib और SDLmain से जोड़ने के लिए की जरूरत है। lib।

ऐसा लगता है कि आप यह कर रहे हैं। तो, मेरा अनुमान है कि आपके पास कंसोल प्रोजेक्ट सेटअप है। इसलिए, लिंकर कॉल करने के लिए एक मुख्य फ़ंक्शन की तलाश में है, लेकिन इसे मैक्रो SDL_main.h द्वारा SDL_main पर रीमेप किया जा रहा है। तो, लिंकर एक प्रवेश बिंदु नहीं मिल सकता है और छोड़ देता है!

+2

हां, विंडोज़ एप्लिकेशन से बदलना (परियोजना गुण/कॉन्फ़िगरेशन गुण/लिंकर/सिस्टम/सबसिस्टम के माध्यम से) काम करता है। धन्यवाद। (हालांकि, मैं एक अलग समाधान के साथ समाप्त हुआ) –

0

लिंकर प्रवेश बिंदु नहीं ढूंढ सकता है। जिसका अर्थ है कि आपका मुख्य() फ़ंक्शन प्रवेश बिंदु के रूप में पहचाना नहीं गया है।

यदि आपके पास .def फ़ाइल है, तो इसे हटा दें।

इसके अलावा, यदि आपने अपनी परियोजना को यूनिकोड के साथ संकलित करने के लिए सेट किया है, एमबीसी के रूप में नहीं, तो आपको मुख्य() के बजाय wmain() का उपयोग करना होगा।

3

मेरे लिए यह पहले निम्नलिखित लाइनों को जोड़ने के लिए मदद की मुख्य():

#ifdef _WIN32 
#undef main 
#endif 

German Wikipedia भी बजाय इन लाइनों को जोड़ने के लिए पता चलता है:

#ifdef _WIN32 
#pragma comment(lib, "SDL.lib") 
#pragma comment(lib, "SDLmain.lib") 
#endif 

हालांकि मैं अभी भी कड़ी में त्रुटियां थीं जब मैं करने की कोशिश की दूसरा समाधान

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