मुझे अपनी फ़ाइलों को जोड़ने में समस्या हो रही है।लिंकर त्रुटि: "लिंकर इनपुट फ़ाइल अप्रयुक्त है क्योंकि लिंक नहीं किया गया है", उस फ़ाइल में किसी फ़ंक्शन के अपरिभाषित संदर्भ
- मुख्य कार्यक्रम,
gen1
:मूल रूप से, मेरे कार्यक्रम के होते हैं।
gen1
- इनपुट प्रसंस्करण के लिएstr2value
के लिए भेजता है प्राप्त करता है, आउटपुट परिणामstr2value
, टोकन में इनपुट टूट जाता है "tokenizer" का उपयोग निर्धारित करता है प्रसंस्करण के प्रकार प्रत्येक टोकन के लिए क्या करना है, और उन्हेंstr2num
, याstr2cmd
के लिए रवाना होकर गुजरता है। इसके बाद परिणाम के सरणी लौटाती है।str2num
- डिट्टोauthor.py
- - एक अजगर स्क्रिप्ट है कि एक शीर्ष लेखcmdTable.h
सेstr2cmd.c
औरstr2cmd.h
उत्पन्न करता है कुछ प्रसंस्करणstr2cmd
करता है।
मुझे पूरा यकीन है कि मेरे पास सही शामिल है, मैंने दो बार जांच की है। मैंने यह भी जांच की है कि हेडर में #ifndef
कोई समस्या नहीं है।
यहाँ मेरी Makefile है:
#CPP = g++ -lserial
CPP = g++ -DTESTMODE
C= gcc
DEFINES = LURC
CFLAGS = -Wall -fshort-enums -D$(DEFINES)
PROJECTFILES = gen1.cpp str2value.o
STR2VALUEFILES = str2value.cpp str2cmd.o str2num.o tokenizer.o str2value.h
gen1 : $(PROJECTFILES)
$(CPP) $(CFLAGS) -o gen1 $(PROJECTFILES)
str2value.o : $(STR2VALUEFILES)
# echo "str2value"
$(CPP) $(CFLAGS) -c $(STR2VALUEFILES)
str2num.o: str2num.cpp str2value.h str2num.hpp
$(C) $(CFLAGS) -c $^
tokenizer.o: tokenizer.cpp tokenizer.hpp
$(CPP) $(CFLAGS) -c $^
str2cmd.o : authorCMDs.py cmdTable.h
python authorCMDs.py cmdTable.h str2cmd #this uses the gcc -E cmdTable.h -DLURC
$(C) $(CFLAGS) -c str2cmd.c str2cmd.h
#TODO: add a thing that checks str2cmd.h/.c has not been modified by hand
.PHONEY: clean
clean:
rm *.o
.PHONEY: all
all:
clear
make clean
make
यहाँ है उत्पादन मैं मेकअप से प्राप्त सभी:
make clean
make[1]: Entering directory `/home/frames/LURC/gen1/gen1Source'
rm *.o
make[1]: Leaving directory `/home/frames/LURC/gen1/gen1Source'
make
make[1]: Entering directory `/home/frames/LURC/gen1/gen1Source'
python authorCMDs.py cmdTable.h str2cmd #this uses the gcc -E cmdTable.h -DLURC
str2cmd.c and str2cmd.h, generated from cmdTable.h
gcc -Wall -fshort-enums -DLURC -c str2cmd.c str2cmd.h
gcc -Wall -fshort-enums -DLURC -c str2num.cpp str2value.h str2num.hpp
g++ -DTESTMODE -Wall -fshort-enums -DLURC -c tokenizer.cpp tokenizer.hpp
g++ -DTESTMODE -Wall -fshort-enums -DLURC -c str2value.cpp str2cmd.o str2num.o tokenizer.o str2value.h
g++: str2cmd.o: linker input file unused because linking not done
g++: str2num.o: linker input file unused because linking not done
g++: tokenizer.o: linker input file unused because linking not done
g++ -DTESTMODE -Wall -fshort-enums -DLURC -o gen1 gen1.cpp str2value.o
str2value.o: In function `getValue(char*)':
str2value.cpp:(.text+0xbd): undefined reference to `str2cmd(char*)'
str2value.cpp:(.text+0x102): undefined reference to `str2num(char*)'
str2value.o: In function `getAllValues(char*)':
str2value.cpp:(.text+0x164): undefined reference to `tokenizer::tokenizer(char*)'
str2value.cpp:(.text+0x177): undefined reference to `tokenizer::getNumTokens(char const*)'
str2value.cpp:(.text+0x1a9): undefined reference to `tokenizer::getNextToken(char const*)'
str2value.cpp:(.text+0x1e9): undefined reference to `tokenizer::getNumTokens(char const*)'
str2value.cpp:(.text+0x201): undefined reference to `tokenizer::~tokenizer()'
str2value.cpp:(.text+0x25b): undefined reference to `tokenizer::~tokenizer()'
collect2: ld returned 1 exit status
make[1]: *** [gen1] Error 1
make[1]: Leaving directory `/home/frames/LURC/gen1/gen1Source'
make: *** [all] Error 2
क्या इस बारे में है के बारे में कोई सुझाव? STR2VALUESFILES
में लापता कार्यों को परिभाषित करने के लिए मुझे आवश्यक सभी ऑब्जेक्ट फ़ाइलें हैं।
मैं अन्य ऑब्जेक्ट फ़ाइलों में से किसी ऑब्जेक्ट फ़ाइल को कैसे बना सकता हूं? gen1 में str2num str2cmd या टोकनेज़र –
के साथ कोई प्रत्यक्ष निर्भरता नहीं है, आप प्रत्येक '.cpp' फ़ाइल को व्यक्तिगत रूप से संकलित करते हैं, फिर सभी परिणामी '.o' फ़ाइलों को एकसाथ लिंक करते हैं। मैंने एक सरल 'मेक' उदाहरण जोड़ा। –
उल्लेख करने के लिए भूल गए - हेडर फ़ाइलों के माध्यम से निर्भरताओं का प्रबंधन, फ़ाइलों को ऑब्जेक्ट नहीं। –