programing

인라인 함수를 호출할 때 정의되지 않은 참조

goodsources 2022. 8. 1. 22:46
반응형

인라인 함수를 호출할 때 정의되지 않은 참조

인라인 함수의 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

반응형