programing

gcc: 정의되지 않은 참조

bestcode 2022. 8. 12. 23:25
반응형

gcc: 정의되지 않은 참조

이것을 정리하고 싶습니다.

프로그램

#include <libavcodec/avcodec.h>

int main(){
    int i = avpicture_get_size(AV_PIX_FMT_RGB24,300,300);
}

실행 중

gcc -I$HOME/ffmpeg/include program.c

에러가 발생하다

/tmp/ccxMLBme.o: In function `main':
program.c:(.text+0x18): undefined reference to `avpicture_get_size'
collect2: ld returned 1 exit status

단, avpicture_get_size는 정의되어 있습니다.왜 이런 일이 생기는 건가요?

단, avpicture_get_size는 정의되어 있습니다.

아니요, 헤더(<libavcodec/avcodec.h>)가 선언합니다.

정의는 라이브러리 자체에 있습니다.

따라서 링커 옵션을 링크에 추가할 수 있습니다.libavcodecgcc 호출 시:

-lavcodec

또한 라이브러리는 필요한 파일 뒤에 명령줄에서 지정해야 합니다.

gcc -I$HOME/ffmpeg/include program.c -lavcodec

이렇게는 안 돼:

gcc -lavcodec -I$HOME/ffmpeg/include program.c

Wyzard의 코멘트를 참조하면 완전한 명령어는 다음과 같습니다.

gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavcodec

링커 표준 위치에 저장되지 않은 라이브러리의 경우 옵션-L를 사용하여 지정된 라이브러리의 추가 검색 경로를 지정합니다.-l옵션, 즉libavcodec.x.y.z이 경우는,


GCC의 링커 옵션에 대한 자세한 내용은 여기를 참조하십시오.

C랑 C++를 섞는 거예요?발생할 수 있는 한 가지 문제는 의 선언이.h을 신청하다.c파일 테두리:

#if defined(__cplusplus)
  extern "C" {                 // Make sure we have C-declarations in C++ programs
#endif

또, 다음과 같이 합니다.

#if defined(__cplusplus)
  }
#endif

주의: 변경할 수 없거나 변경할 의사가 없는 경우.h해당 파일에는 다음 파일을 포함시킬 수 있습니다.extern "C":

extern "C" {
#include <abc.h>
} //extern

언급URL : https://stackoverflow.com/questions/22426574/gcc-undefined-reference-to

반응형