Ubuntu+ VS Code + gcc "undefined reference to" 에러 해결방법

Ubuntu + VScode + gcc

우분투나 리눅스 환경에서 VS Code를 이용해서 C/C++를 컴파일하다가 오류가 발생하는 경우 해결방법을 소개한다. 이 증상은 다른 라이브러리를 사용할 때는 발생하지 않다가 math.h 헤더를 포함해서 컴파일하려고 하자 발생했다. undefined reference to 에러는 헤더를 제대로 참조하지 못하는 경우에 발생한다.

math.h에 들어있는 pow함수와 sqrt함수를 참조하지 못하고 있는 것을 알 수 있다. Windows에서 동일 환경에서 실행했을 때는 문제없이 컴파일되는 걸 보니 Ubuntu 문제라고 생각되어 해결 방법을 찾아보았다. 나는 Code Runner Extention을 이용해서 코드를 실행시키고 있기 때문에 settings.json에서 해당 extention의 설정을 변경해주었다.

현재 Go를 사용해서 컴파일 할 때는 문제가 생기지 않아서 C/C++의 경우만 Execution Map을 설정해 주었다.

// Code runner - ExcutionMap
    "code-runner.executorMap": {
        "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -lm&& $dir$fileNameWithoutExt",
        "cpp": "cd $dir && g++ -std=c++14 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
    },

이 부분을 추가해주면 정상적으로 실행되는 것을 알 수 있다. 여기서 내가 추가한 플래그는 -lm이다. -l플래그는 헤더 파일을 참조할 위치를 알려주는 플래그이고, mmath.h 헤더를 가리킨다. 따라서 math.h 헤더를 정상적으로 참조하게 되므로 코드가 실행된다. 만일 내가 현재 불러오고 있는 함수의 헤더가 math.h가 아니라면 Execution Map에서 플래그를 l${headername)으로 변경해주면 된다. 다만 주의할 점은 -l플래그는 항상 커맨드 마지막에 입력해야 한다.
혹시 Code Runner를 사용하지 않는다면 단순히 커맨드로 컴파일 할 때 다음과 예제와 같이 입력하면 해결된다.

gcc test.c -o test -lm