반응형
링커 오류: "링크가 완료되지 않아 링커 입력 파일이 사용되지 않음", 해당 파일의 함수에 대한 정의되지 않은 참조
내 파일들을 연결하는 데 문제가 있다.
기본적으로 내 프로그램은 다음과 같이 구성된다.
- 메인 프로그램,
gen1
. gen1
- 입력 전송 수신 대상str2value
처리용, 결과 출력str2value
는 입력을 "분할자"를 사용하여 토큰으로 분할하여 각 토큰에 대해 수행할 처리 유형을 결정하고 에 전달str2num
또는str2cmd
. 그런 다음 결과의 배열을 반환한다.str2num
- 일부 가공 수행str2cmd
- dittoauthor.py
- 생성되는 pythonstr2cmd.c
그리고str2cmd.h
머리글에서cmdTable.h
.
나는 내가 내 권리를 가지고 있다고 확신해, 나는 몇 번 확인했어.또한 어떠한 조건도 없는 것을 확인했다.#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
누락된 함수를 정의하기 위해 필요한 모든 오브젝트 파일을 가지고 있다.
너는 컴파일러가 어떻게 일을 정리하는지 헷갈리는 것 같아.사용할 때-c
플래그(즉, 연결이 되지 않음), 입력은 C++ 코드, 출력은 객체 코드다.그.o
따라서 파일들과 섞이지 않는다.-c
그리고 컴파일러는 그것에 대해 당신에게 경고한다.객체 파일의 기호는 그와 같은 다른 객체 파일로 이동되지 않는다.
모든 오브젝트 파일은 최종 링커 호출에 있어야 하며, 여기에는 해당되지 않으므로 링커(voiler를 통해 호출됨)g++
(앞쪽 끝) 기호 누락에 대한 불만
여기 작은 예가 있다(콜링).g++
명확하게 하기 위해:
PROG ?= myprog
OBJS = worker.o main.o
all: $(PROG)
.cpp.o:
g++ -Wall -pedantic -ggdb -O2 -c -o $@ $<
$(PROG): $(OBJS)
g++ -Wall -pedantic -ggdb -O2 -o $@ $(OBJS)
또한 X11과 함께 제공되는 유틸리티는 소스 코드 의존성에 많은 도움을 준다.여러분은 또한 이 사진들을 보고 싶을 것이다.-M
gcc
건축 선택권make
규칙.
반응형
'programing' 카테고리의 다른 글
외부 키워드는 무슨 뜻인가? (0) | 2022.05.05 |
---|---|
상태 업데이트에도 불구하고 vuex 구성 요소가 업데이트되지 않는 이유 (0) | 2022.05.04 |
vue 구성 요소에서 슬릭 슬라이더가 작동하지 않음 (0) | 2022.05.04 |
vuej에서 여러 하위 구성 요소에서 발생하는 이벤트를 캡처할 수 있는 방법이 있는가? (0) | 2022.05.04 |
기존 멀티페이지에서 jQuery를 VueJS 2로 교체할 때 가장 좋은 방법.NET MVC 응용 프로그램 (0) | 2022.05.04 |