You mean like this :
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// INIT LIGHTS
gluLookAt(c->start_pos.x, c->start_pos.y, c->start_pos.z, c->start_looking_direction.x, c->start_looking_direction.y, c->start_looking_direction.z, 0.0, 0.0, 1.0);
glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_color);
It still does not appear to work..
Imagine the light is like any other mesh. To position a mesh you would perform matrix operations, then draw the mesh, then pop the matrix stack or move somewhere else using matrix operations.
The first glLoadIdentity() reset the model view matrix to the origin of the world. gluLookAt then moves you to the position of the camera. If you now call glLightfv(GL_LIGHT0, GL_POSITION, light_pos), your light will therefore always be where the camera is.
I noticed in your code that you called glLightfv without calling any matrix code before, so you would have the same matrix as you had at the end of the previous frame.
Call glLoadIdentity, then glLightfv, then gluLookAt. The position supplied to glLightfv is then absolute.
Also check out what ph3nom said, I didn't check for that.
My libgl playground (not for production): https://bitbucket.org/bogglez/libgl15
My lxdream fork (with some small fixes): https://bitbucket.org/bogglez/lxdream