[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