[vtkusers] AppImage packaging: GLEW could not be initialized
Elvis Stansvik
elvis.stansvik at orexplore.com
Mon Jul 11 15:54:45 EDT 2016
I now have a minimal example I can share:
https://drive.google.com/open?id=0B1a2u6qVxaL7S2d3OF9uR3Q2amc
This is an AppImage (hello.appimage), built just the way I build my
application. It shows a sphere in a QVTKWidget. The download is 62 MB since
the VTK bundled in the image includes debugging symbols.
It would be great if other people could download and execute the image on
their distros, to see if it runs. I've tested it only on Kubuntu 16.04
(where it works) and Arch Linux (where it crashes like described in
previous mails).
Specifically it would be _very_ interesting if someone with
1. Arch Linux, or
2. a somewhat old Intel graphics chipset, or (even better)
3. both of the above,
could try running it, and see if they can reproduce my crash (failure to
initialize GLEW).
I'm attaching the sources and scripts (hello.tar.gz) from which I built
this example. If you want to build it yourself, just type "make" in the
extracted directory. All you need is Docker and Make, everything else is
taken care of inside a CentOS 6 Docker container.
Many thanks in advance.
Elvis
2016-07-11 17:27 GMT+02:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:
> Hi all,
>
> In exploring different deployment options, I'm now trying to create an
> AppImage of a VTK+Qt application. For those who don't know, AppImage is a
> packaging format where the application, including (almost) all of its
> dependencies are put into a self-extracting ISO image called an AppImage.
>
> Doing this takes quite a bit of manual work, but if you do things
> correctly and build the image on a good base system (I'm using CentOS 6),
> the image should run on a multitude of distros.
>
> I've had some success: The resulting image runs on e.g. Ubuntu Xenial.
>
> I'm now trying it on my Arch Linux laptop (not a common/easy target for
> AppImages, but I'd like to make it work since I run it personally), and get:
>
> ERROR: In /tmp/VTK-7.0.0/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line
> 533
> vtkXOpenGLRenderWindow (0x1e48140): GLEW could not be initialized.
>
> This is due to a glewInit() call failing during initialization of the
> render window, and I've debugged it to the underlying call to
> glGetString(GL_VERSION) in VTK's forked GLEW library returning NULL.
>
> Does anyone have an idea why this might happen? The VTK I'm using here is
> configured as follows:
>
> cmake3 \
> -DCMAKE_INSTALL_PREFIX=/usr \
> -DVTK_Group_Qt=ON \
> -DVTK_QT_VERSION=5 \
> -DVTK_Group_Imaging=ON \
> -DVTK_Group_Views=ON \
> -DVTK_Group_MPI=OFF \
> -DVTK_Group_Tk=OFF \
> -DVTK_Group_Web=OFF \
> -DBUILD_TESTING=OFF \
> -DVTK_USE_SYSTEM_LIBRARIES=ON \
> -DVTK_USE_SYSTEM_LIBPROJ4=OFF \
> -DCMAKE_BUILD_TYPE=Debug \
> ..
>
> And it uses the OpenGL2 backend.
>
> It was built inside a CentOS 6 Docker container on a Kubuntu 16.04 host
> with HD 4400 Intel graphics adapter. The target system is an older laptop
> with up-to-date Arch Linux and a weaker HD 3000 Intel graphics adapter.
>
> Now, packaging apps that use OpenGL is a bit tricky, because you can't
> bundle e.g. libX11, libGL and some other libraries that are dependant on
> the user's graphics adapter/environment.
>
> The libraries that I've chosen to _not_ bundle are:
>
> libz.so.1
> libm.so.6
> libSM.so.6
> libICE.so.6
> libX11.so.6
> libXext.so.6
> libXt.so.6
> libstdc++.so.6
> libgcc_s.so.1
> libc.so.6
> libpthread.so.0
> librt.so.1
> libGL.so.1
> libdl.so.2
> libuuid.so.1
> libxcb.so.1
> libxcb-dri3.so.0
> libxcb-present.so.0
> libxcb-randr.so.0
> libxcb-xfixes.so.0
> libxcb-render.so.0
> libxcb-shape.so.0
> libxcb-sync.so.1
> libxshmfence.so.1
> libglapi.so.0
> libXdamage.so.1
> libXfixes.so.3
> libX11-xcb.so.1
> libxcb-glx.so.0
> libxcb-dri2.so.0
> libXxf86vm.so.1
> libdrm.so.2
> libXau.so.6
> libXdmcp.so.6
>
> This may be a little too liberal, and it could be that I should be
> bundling some of these. But it seems to work fine since the AppImage runs
> without problem on Kubuntu 16.04.
>
> The application also runs fine if I build VTK and the application
> "normally" on the Arch host and run it (using OpenGL2 backend), so the
> graphics adapter should be capable enough. It's just when I try to run the
> CentOS 6-built AppImage on the Arch host that it fails.
>
> The application essentially just creates a QVTKWidget and renders a volume
> into its rendering window.
>
> I saw that one (perhaps likely?) reason for glGetString(GL_VERSION)
> returning NULL is that initialization of the GL context failed (or wasn't
> fully done yet). If this is the case, does anyone know where I can debug
> this further in VTK? Where is the OpenGL context in VTK set up when using
> QVTKWidget + OpenGL2 backend?
>
> Finally: Has anyone else tried packaging VTK applications as AppImages?
>
> I know ParaView is provided as a prebuilt Linux binary with VTK bundled,
> so I can imagine the ParaView folks has ran into some issues like this?
>
> Thanks in advance for any advice.
>
> Elvis
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160711/7756d4e9/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: hello.tar.gz
Type: application/x-gzip
Size: 4372 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160711/7756d4e9/attachment.bin>
More information about the vtkusers
mailing list