Are you really sure that the shaders are correct? Why you're doing stuff like this:
GLchar **str = new GLchar*;
Not sure how that pointer works, too sleepy. I'd probably write it like this, much simpler:
char *str = new char; memset(str, 0, 256); readvertexshader(); memset(str, 0, 256); readfragmentshader(); // ... glShaderSource(fShad, 1, (const char**)&str, NULL); // and now you can really make sure that you have the actual shader source there, just print it out printf("shader source:\n%s\n", str);
Actually... I think you should have written (const char**)&str before, because of that weird pointer thingie you were doing. I tried your code on my computer and seemed to work ok with those changes, had to change version numbers too though, my card doesn't support OpenGL 4.0.
Edit: And oh, seemed like I had to call ifs.close() too, not sure if this is only like this on Linux? I think it clears the eof bit, too lazy to check out. Sleep I goes.