A resposta vai envolver "quais pacotes de devel você tem?" e você tem mais de uma biblioteca compartilhada?
Eu realmente não acho que há uma incompatibilidade no seu caso, no entanto. Eu acho que você está lendo mal a saída. O que você vê aqui é que a versão "core profile" é diferente do número da versão "shading profile". Mas o glxgears também está na versão 3.0 do OpenGL.
Peça diferente para as informações da versão
$ glxgears -info
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
GL_RENDERER = Mesa DRI Intel(R) HD Graphics 530 (Skylake GT2)
GL_VERSION = 3.0 Mesa 17.0.7
GL_VENDOR = Intel Open Source Technology Center
Se você continuar pensando que há problemas, precisamos de detalhes. Você tem um Makefile? De onde isso vem? Geralmente em compilações maiores, existe um programa ./configure que verifica qual versão do opengl deve ser usada.
Ou mostre-nos seu comando de compilação g ++ e a saída do terminal. Como o comando g ++ que você digita terá instruções include e linking, -L .... Essas coisas controlam qual biblioteca é colocada em uso. Se o seu comando não fizer nenhum recurso especial, você está usando o que é considerado padrão em seu sistema. Muitas vezes, esse é o antigo, não o novo.
Mesmo que o glxgears esteja vinculado a um GL mais recente, e eu não acho que o seu seja, pode ser que seus pacotes de desenvolvimento sejam para uma versão mais antiga. A versão do pacote devel, não o pacote de tempo de execução, determinará qual versão será usada.
Como você, eu tenho mesa fornecendo o suporte opengl,
Você pode perguntar ao seu programa glxgears qual biblioteca compartilhada está usando, mas isso não significa necessariamente a mesma versão de desenvolvimento que você instalou em seu computador. Muitos usuários não têm pacotes de devel instalados, já que os programas são compilados "lá" no sistema de produção de pacotes e cada PC só precisa ter a parte de tempo de execução.