मैं एक प्रोजेक्ट के प्रारंभिक चरणों में पढ़ रहा हूं (पढ़ा: कल शुरू हुआ), और मैं अपना प्रारंभिक मेकफ़ाइल स्थापित कर रहा हूं। यह बहुत सरल है। यहाँ फ़ाइल की पूरी सामग्री है: मुझे लगता है कि यह है कि मैं विंडोज पर काम कर रहा हूँ उल्लेख करने के लिए महत्वपूर्ण है इस बिंदु परइन g ++ "एकाधिक परिभाषा" त्रुटियों के साथ क्या है?
all: main.o resource.o
g++ -o output.exe main.o resource.o
main.o: main.cpp main.h resource.h
g++ -mwindows -o main.o main.cpp
resource.o: resource.rc
windres resource.rc resource.o
clean:
rm *.o
, तो मैं MinGW जी के साथ या तो PowerShell में यह सब कर रहा हूँ ++ 4.5.2 या अन्यथा सिगविन और जी ++ 3.4.4 के साथ (मैंने दोनों की कोशिश की है, वही त्रुटियां)।
उपरोक्त सभी सूचीबद्ध फ़ाइलों की सामग्री छापे बिना, यह कहने के लिए पर्याप्त है कि main.h में windows.h और resource.h का संदर्भ है, main.cpp में main.h का संदर्भ है और कुछ फ़ंक्शन , सबसे महत्वपूर्ण रूप से एक int WINAPI WinMain (...) फ़ंक्शन और एक LRESULT कॉलबैक WndProc (...) फ़ंक्शन, resource.rc में एक फ़ाइल मेनू के साथ एक साधारण मेनूबार के लिए संसाधन परिभाषा विवरण और एक डमी द्वितीय मेनू के साथ-साथ संदर्भ भी शामिल है resource.h में, और resource.h में resource.rc में उपयोग की गई आईडी के लिए बस परिभाषित विवरण हैं।
अब, मैं संसाधन.आरसी और main.h दोनों को अलग-अलग एक दूसरे से संकलित कर सकता हूं और उन दो अच्छी .o फाइलें प्राप्त कर सकता हूं।
main.o:main.cpp:(.text+0x0): multiple definition of `mainCRTStartup'
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../crt2.o:crt1.c:(.text+0x160): first defined here
main.o:main.cpp:(.text+0x0): multiple definition of `WinMainCRTStartup'
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../crt2.o:crt1.c:(.text+0x140): first defined here
collect2: ld returned 1 exit status
make: *** [all] Error 1
ऊपर PowerShell में उत्पन्न होता है: हालांकि, जब मैं उन्हें लिंक और output.exe उत्पादन करने के लिए प्रयास करते हैं, मैं त्रुटियों, मैं सच में समझ में जिनमें से कोई भी के निम्नलिखित डरावना सूची मिलता है। सिग्विन त्रुटियों की एक बहुत ही समान सूची देता है, फिर भी "एकाधिक परिभाषा" बयान के आसपास केंद्रित है। कई परिभाषाएं सी: /mingw/lib/crt2.o में प्रतीत होती हैं, और संभवतः crt1.c नाम की एक और फ़ाइल, जो अधिक उपयोगी प्रतीत होती है क्योंकि स्पष्ट रूप से सी एक .o फ़ाइल से कहीं अधिक मानव पठनीय है, लेकिन मुझे सी: \ MinGW फ़ोल्डर के भीतर कहीं भी उस शीर्षक के साथ कुछ भी नहीं मिल रहा है।
कोई भी दिशा बिल्कुल उपयोगी होगी, क्योंकि इस समय मैं बहुत खो गया हूं।
संपादित करें: main.cpp में केवल # संयुक्त विवरण:
#include "main.h"
main.h की सामग्री:
#ifndef _MAIN_H_
#define _MAIN_H_
#include <windows.h>
#include "resource.h"
#endif
शायद यह जहां हेडर शामिल किया जा रहा है main.cpp फ़ाइल के पहले भाग को देखने के लिए मदद मिलेगी। मुझे इस तरह की समस्या याद आ रही है जिसे समझने के द्वारा हल किया गया था कि स्पष्ट रूप से शामिल किए गए शीर्षकों में से एक को अन्य शीर्षलेख फ़ाइल द्वारा निहित रूप से शामिल करने की आवश्यकता है, ताकि '# परिभाषित' सही ढंग से सेट हो। – hardmath
'_MAIN_H_' के साथ अग्रणी अंडरस्कोर का उपयोग न करें।अग्रणी अंडरस्कोर के नाम पुस्तकालयों के लिए आरक्षित हैं। – KitsuneYMG