2013-09-07 6 views
14

मैं इस कोड को संकलित करना चाहते हैं:SDL2: LNK1561: प्रवेश बिंदु परिभाषित किया जाना चाहिए

#include <SDL.h> 

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

लेकिन यह नहीं जोड़ा जा सकता: Error 1 error LNK1561: entry point must be defined

इस पुस्तकालय में कुछ अजीब कोड है: http://hg.libsdl.org/SDL/file/75726efbf679/include/SDL_main.h

#define main SDL_main 

इसके अलावा मैंने परियोजना सेटिंग्स => लिंकर => इनपुट में SDL2.lib;SDL2main.lib जोड़ा।

इस परियोजना को चलाने के लिए मैं क्या कर सकता हूं?
वीएस 2012 एसपी 3, खाली सी ++ परियोजना।

+2

की [क्यों एसडीएल मुख्य मैक्रो को परिभाषित करता है?] (Http संभव डुप्लिकेट: // stackoverflow.com/questions/11976084/why-sdl-defines-main-macro) –

+0

कंसोल एप्लिकेशन? – 4pie0

+2

@ माइकसेमोर, यह डुप्लिकेट नहीं है: उस थ्रेड में कोई जवाब नहीं है। – DmitryR

उत्तर

34
इस

मैं here क्या मिल गया है है:

अधिकार परियोजना के नाम पर क्लिक -> गुण -> लिंकर टैब का विस्तार करें -> सिस्टम -> सबसिस्टम: यकीन है कि यह कंसोल है (/ सबसिस्टम: कंसोल)

+0

यदि आप int main() को अपने आप संकलित करने के लिए प्राप्त कर सकते हैं तो यह सुनिश्चित करें कि आपने अपनी संकलक सेटिंग को यहां बताया है, जैसा कि आपने अपनी परियोजना बनाई है, इसका मतलब यह हो सकता है कि यह सेटिंग आपके लिए नहीं की गई है पहले से। मेरी समस्या थी। – ReturnVoid

1

एक tinky_winki रूप

लिखा अधिकार परियोजना के नाम पर क्लिक -> गुण -> लिंकर टैब का विस्तार करें -> सिस्टम -> सबसिस्टम: यकीन है कि यह कंसोल है (/ सबसिस्टम: कंसोल)

लेकिन तुम खिड़की के साथ सांत्वना की उम्मीद नहीं है, तो बस का उपयोग करें, /सबसिस्टम: WINDOWS

2

मैं ने पाया है कि स्थापित करने /सबसिस्टम: कंसोल समाधान का केवल आधा है। दूसरी छमाही आपके अतिरिक्त परिभाषाओं में SDL_MAIN_HANDLED जोड़ना है। इस समाधान को हल करने के लिए उपयोग किया गया सुराग SDL_main.h में पाया जा सकता है। SDL_MAIN_HANDLED सेट करना एसडीएल हेडर फाइलें बताएं जिन्हें आपने पहले से ही main फ़ंक्शन प्रदान किया है और इसके लिए अपने स्वयं के प्रवेश बिंदु को फिर से परिभाषित करने की इच्छा नहीं है।

+0

इस समस्या को हल करने का यह सही तरीका है - अच्छा डीबगिंग कौशल @ डीपीरॉन। यदि आपकी परियोजना शुरू करने के लिए सही तरीके से स्थापित की गई है तो आपको इस चरण – user3001499

1

#undef main नहीं है! जबकि एसडीएल पक्ष पर इसे फिर से परिभाषित करने के लिए यह वास्तव में एक बुरा अभ्यास है, उनके पास अच्छे कारण हैं: WinMain लाइब्रेरी पक्ष पर परिभाषित किया गया है और कुछ इनिट कोड चलाने के लिए उपयोग किया जाता है, जो संगतता समस्याओं के साथ मदद करता है। (स्टीम या एंड्रॉइड जैसे अन्य प्लेटफॉर्म पर पोर्टिंग जैसे विभिन्न एसडीएल कार्यान्वयन का उपयोग करते समय भी अधिक)

तो आपको क्या करना चाहिए? विंडोज पर, आप हमेशा SDL2main.libSDL2.lib से पहले शामिल हैं और यह सुनिश्चित करना चाहिये जब आपका मुख्य प्रारूप में है:

int main(int argc, char* argv[]) // CORRECT 
void main(int argc, char* argv[]) // WRONG 
int main(int, char**) // MAY BE CORRECT 

स्रोत: SDL2 Windows FAQ

+0

पर लिंकर गुणों को बदलने की आवश्यकता नहीं है 'int main (int, char **)' भी सही है। इसके अलावा, स्टीम एसडीएल कार्यान्वयन के बारे में क्या है? Google को इसके बारे में पता नहीं लगता है। – HolyBlackCat

+1

@ होलीब्लैक कैट https://wiki.libsdl.org/Installation#SteamOS एसडीएल एक गतिशील लोडर प्रदान करता है और भाप एसडीएल की अपनी प्रति शामिल करने के लिए जाना जाता है जो स्टीमोज़ के लिए अलग है –

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