1. Some Linux distributions default linker implicitly enables the as-needed
linking flag. This means that your shared library or executable will only
link to libraries from which they use symbols. So if you explicitly link to
pthread but don't use any symbols you wont have a 'DT_NEEDED' entry for
pthread.
2. NVidia libGL (driver version 352 ) uses pthread but doesn't have
a DT_NEEDED entry for the library. When you run ldd or readelf on the library
you won't detect any reference to the pthread library. Aside this is odd
since the mesa version does explicitly link to pthread. But if you run the
following command:
"strings /usr/lib/nvidia-352/libGL.so.1 | grep pthread | less"
You will see the following:
{ pthread_create
pthread_self
pthread_equal
pthread_key_crea
...
libpthread.so.0
libpthread.so
pthread_create
}
This is very strong evidence that this library is using pthread.
3. So what does this all mean?
It means that on system that use the linking flag 'as-needed', are using
the nvidia driver, and don't use pthread will generate binaries that crash
on launch. The only way to work around this issue is to do either:
A: Specify 'no-as-needed' to the linker potentially causing over-linking
and a slow down in link time
B: Use a method from pthread, making the linker realize that pthread is
needed.
We went with method B.
Starting in OSX 10.9, apple has deprecated the glut.h provided header
so we need to figure out how we want to do window management on OSX. I expect
the way forward is to require the developer to install openGLUT.
Add DeviceAdapterAlgorithm as an include to the TransferToOpenGL
file.
Clean up comments in opengl/cuda/internal/TransferToOpenGL.h
Add FindGLEW.cmake to the License exepmtion list
Copy the OpenGL Interop code from DAX and convert it to VTKm.
Tests include transferring data to an OpenGL context for all VTKm common
data types.
A WindowBase class using GLUT is also included.