반응형
인라인 함수를 호출할 때 정의되지 않은 참조
인라인 함수의 GCC 4.8.1에서 이상한 에러가 발생하고 있습니다.
헤더 파일에 정의되어 있는2개의 거의 동일한 인라인함수가 있습니다(debug.h
그리고.error.h
)의 경우src/include/
다만, 인쇄하는 것만이 다릅니다.- 1개의 프리픽스DEBUG:
메시지, 그리고 다른 쪽과%s: error: %s
(프로그램명, 에러 메시지).함수를 인라인으로 정의하고 디버깅빌드를 컴파일하는 경우(따라서 매크로를 설정합니다).DEBUG=1
정의되지 않은 참조 오류가 많이 발생합니다.
src/main_debug.o
gcc -osrc/main_debug.o src/main.c -c -Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g -DCC="\"gcc\"" -DCFLAGS="\"-Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g\"" -DDEBUG=1 -DBTCWATCH_VERSION="\"0.0.1\""
src/lib/btcapi_debug.o
gcc -osrc/lib/btcapi_debug.o src/lib/btcapi.c -c -Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g -DCC="\"gcc\"" -DCFLAGS="\"-Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g\"" -DDEBUG=1
src/lib/libbtcapi_debug.a
ar rc src/lib/libbtcapi_debug.a src/lib/btcapi_debug.o
ranlib src/lib/libbtcapi_debug.a
src/lib/cmdlineutils_debug.o
gcc -o src/lib/cmdlineutils_debug.o src/lib/cmdlineutils.c -c -Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g -DCC="\"gcc\"" -DCFLAGS="\"-Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g\"" -DDEBUG=1
src/lib/libcmdlineutils_debug.a
ar rc src/lib/libcmdlineutils_debug.a src/lib/cmdlineutils_debug.o
ranlib src/lib/libcmdlineutils_debug.a
debug
gcc -obtcwatch-debug src/main_debug.o -Lsrc/lib/ -lbtcapi_debug -lcmdlineutils_debug -lcurl -ljansson
src/main_debug.o: In function `main':
/home/marcoms/btcwatch/src/main.c:148: undefined reference to `debug'
src/main_debug.o:/home/marcoms/btcwatch/src/main.c:185: more undefined references to `debug' follow
collect2: error: ld returned 1 exit status
make: *** [debug] Error 1
하지만 변화debug()
의 정의static inline
에러를 삭제합니다.그러나 나는 한 번도 에러를 받은 적이 없다.error()
의 정의는 다음과 같습니다만,inline
가 아닌static inline
.
정의는 모두 헤더에 있습니다(즉, 프로토타입이 아님).
매뉴얼에 따르면 패스-std=gnu11
는, GNU 인라인 시멘틱스 대신에 C99 를 유효하게 합니다.
즉,inline
,static inline
그리고.extern inline
모두 다르게 행동한다.특히,inline
님은 다른 번역 유닛에 외부 정의를 상정하고 있습니다(정의는 중복되지 않고 제공할 수 있습니다.이 답변 참조).
언급URL : https://stackoverflow.com/questions/19068705/undefined-reference-when-calling-inline-function
반응형
'programing' 카테고리의 다른 글
우체국에서 일했는데도 400 오류, 생각할 수 있는 이유? (0) | 2022.08.01 |
---|---|
Java 8 스트림 - 수집과 감소 (0) | 2022.08.01 |
일부 경로에서 글로벌컴포넌트(예를 들어 navbar)를 숨기려면 어떻게 해야 합니까? (0) | 2022.08.01 |
VueJ 2 - $emit을 사용한 파라미터 전달 방법 (0) | 2022.08.01 |
D3 + VueJs + Typescript | D3.js 라이브러리 Import 방법 (0) | 2022.08.01 |