Page 1 of 1

libEGL missing/erroneous links to GLESv2

Posted: Sun Oct 14, 2012 7:59 pm
by Chinasaur
Hey guys, as discussed at the bottom of this thread: http://www.raspberrypi.org/phpBB3/viewt ... 90&p=94769
when linking against libEGL you frequently run into a series of errors where you are missing things in libGLESv2, e.g.

Code: Select all

/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_GetRenderbufferParameteriv'
/opt/vc/lib/libEGL.so: undefined reference to `gl20_client_state_init'
/opt/vc/lib/libEGL.so: undefined reference to `gl11_client_state_init'
/opt/vc/lib/libEGL.so: undefined reference to `glintAttribPointer'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_GenFramebuffers'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_buffer_info_get'
/opt/vc/lib/libEGL.so: undefined reference to `glDiscardFramebufferEXT'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_FramebufferTexture2D'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_IsRenderbuffer'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_set_error'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_BindFramebuffer'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_GenRenderbuffers'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_set_error_api'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_BindRenderbuffer'
/opt/vc/lib/libEGL.so: undefined reference to `glBufferSubData'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_GetFramebufferAttachmentParameteriv'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_CheckFramebufferStatus'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_FramebufferRenderbuffer'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_RenderbufferStorage'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_DeleteRenderbuffers'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_GenerateMipmap'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_buffer_info_set'
/opt/vc/lib/libEGL.so: undefined reference to `glPointSizePointerOES'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_DeleteFramebuffers'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_IsFramebuffer'
/opt/vc/lib/libEGL.so: undefined reference to `glxx_client_state_free'
Adding -lGLESv2 works around the errors.

But I'm confused by this; if EGL needs GLESv2 constitutively, why doesn't it link to it itself? (I'm also not clear why EGL needs GLESv2 in the first place; I'm trying to build Cairo with EGL/VG support so it will work without X. As an initial attempt, I wasn't planning to include GLESv2 features but it seems EGL thinks it needs them anyway.)

Some people have said that this only started happening in more recent versions of the firmware? Shall I post an issue on Git? I assume this has already been discussed somewhere but I haven't found it.

Re: libEGL missing/erroneous links to GLESv2

Posted: Mon Oct 15, 2012 10:59 pm
by williamaadams
As far as I can tell, EGL depends on a point structure that is located in then GLESv2 library. This bit me as well. It seems kind of pointless to bring in such a huge dependency for a single data structure, but there it is. Perhaps it was a mistake. Can't really say.

Re: libEGL missing/erroneous links to GLESv2

Posted: Thu Oct 25, 2012 7:35 pm
by Chinasaur
Okay, I submitted an issue on Github: https://github.com/raspberrypi/firmware/issues/110