[vtkusers] AppImage packaging: GLEW could not be initialized

Elvis Stansvik elvis.stansvik at orexplore.com
Mon Jul 11 11:27:34 EDT 2016


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/3f0ee298/attachment.html>


More information about the vtkusers mailing list