Q: I'm still getting errors due to library functions being undefined, even though I'm explicitly requesting the right libraries while linking.
A: Many linkers make one pass over the list of object files and libraries you specify, and extract from libraries only those modules which satisfy references which have so far come up as undefined. Therefore, the order in which libraries are listed with respect to object files (and each other) is significant; usually, you want to search the libraries last.
For example, under Unix, a command line like
cc -lm myprog.c # WRONGusually won't work. Instead, put any -l options at the end of the command line:
cc myprog.c -lm
If you list a library first, the linker doesn't know that it needs anything out of it yet, and passes it by. See also question 13.28.