Erro de linker "undefined reference" em C++: causas e correção
Olá! Comecei a estudar C++ e me deparei com um erro que não consigo entender. Estou escrevendo um programa simples que soma dois números, mas o compilador exibe um erro estranho na fase de linker.
Aqui está meu código. Tenho um arquivo de cabeçalho `math_utils.h`:
```cpp
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
#endif
```
Arquivo `math_utils.cpp`:
```cpp
#include "math_utils.h"
int add(int a, int b) {
return a + b;
}
```
E o arquivo principal `main.cpp`:
```cpp
#include
#include "math_utils.h"
int main() {
std::cout << "Sum: " << add(5, 3) << std::endl;
return 0;
}
```
Estou compilando assim: `g++ main.cpp -o program`. Em resposta, recebo o erro:
```
/tmp/ccXxYyZz.o: In function `main':
main.cpp:(.text+0x1a): undefined reference to `add(int, int)'
collect2: error: ld returned 1 exit status
```
Eu verifiquei — a função `add` está definida em `math_utils.cpp`, o cabeçalho está incluído. Por que o linker não a enxerga? O que é "undefined reference"?