# Undefined reference to "function name"



## tkh

Hi guys,

I am currently using Linux trying to compile a C program but it keeps returning an "Undefined reference to <functionName>".. generally what is the source of problem? I tried adding in the relevant libraries but to no avail.

Thanks


----------



## Chicon

Hi tkh,

The probleme may occur when the library (a file with the *.h* extension) in which the function is defined is missing or mislocated.
You should check the library path used for the pre-compiler.
Otherwise, you have to check your coding, C language is case sensitive.


----------



## AGCurry

Chicon said:


> Hi tkh,
> 
> The probleme may occur when the library (a file with the *.h* extension) in which the function is defined is missing or mislocated.
> You should check the library path used for the pre-compiler.
> Otherwise, you have to check your coding, C language is case sensitive.


This is a common confusion in C programming.

The library is NOT the same as the header (.h) file. C libraries are collections of compiled objects which are LINKED to your object code by the linker. Header files are lexically included by the preprocessor.

When you compile, you need to make sure that the libraries are where they're supposed to be AND the header files (INCLUDE=...) are where they're supposed to be. Either one can mess you up.


----------



## Chicon

AGCurry said:


> This is a common confusion in C programming.
> 
> The library is NOT the same as the header (.h) file. C libraries are collections of compiled objects which are LINKED to your object code by the linker. Header files are lexically included by the preprocessor.
> 
> When you compile, you need to make sure that the libraries are where they're supposed to be AND the header files (INCLUDE=...) are where they're supposed to be. Either one can mess you up.


Thanks for refreshing my memory, AGC !


----------



## blaqDeaph

AGCurry said:


> This is a common confusion in C programming.
> 
> The library is NOT the same as the header (.h) file. C libraries are collections of compiled objects which are LINKED to your object code by the linker. Header files are lexically included by the preprocessor.
> 
> When you compile, you need to make sure that the libraries are where they're supposed to be AND the header files (INCLUDE=...) are where they're supposed to be. Either one can mess you up.


Thats just the tip of the iceberg, because header files can contain refrences to multiple libraries, by including other header files in it. A good example is the windows.h header, which actually includes other header files like winuser.h

Trying to find out what library you need can be a mess, your best bet is to download the full Development kit that contains all the headers/libraries. Otherwise it's like finding a needle in the haystack.


----------

