RenderKit / ospray

An Open, Scalable, Portable, Ray Tracing Based Rendering Engine for High-Fidelity Visualization
http://ospray.org
Apache License 2.0
1k stars 182 forks source link

Undefined symbol: ospray_create_material__scivis__OBJMaterial #357

Closed paulmelis closed 4 years ago

paulmelis commented 5 years ago

This is some fallout from running my own code under AddressSanitizer, which detected a null pointer access error somewhere in the OSPRay code. However, looking at the ASAN stack trace I noticed the OSPRay shared libs came from the older 1.8.5 global installation of OSPRay (Arch package) and not my manually built devel version I have stored somewhere else.

I removed the 1.8.5 package and now looking at OSPRay's debug output I see this (some unrelated stuff deleted):

$ ./bin/ospray_render_server --osp:debug

Embree Ray Tracing Kernels 3.5.2 (e766297adcdaf8e5d8dd996c15aed753255230fd)
  Compiler  : Intel Compiler 17.0.1
  Build     : Release 
  Platform  : Linux (64bit)
  CPU       : Haswell (GenuineIntel)
   Threads  : 4
   ISA      : XMM YMM SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 POPCNT AVX F16C RDRAND AVX2 FMA3 LZCNT BMI1 BMI2 
   Targets  : SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 AVX AVXI AVX2 
   MXCSR    : FTZ=1, DAZ=1
  Config
    Threads : 1
    ISA     : XMM YMM SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 POPCNT AVX F16C RDRAND AVX2 FMA3 LZCNT BMI1 BMI2 
    Targets : SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 AVX AVXI AVX2  (supported)
              SSE2 SSE4.2 AVX AVX2 AVX512KNL AVX512SKX  (compile time enabled)
    Features: intersection_filter 
    Tasking : TBB2019.0 TBB_header_interface_11002 TBB_lib_interface_11006 

...

--------------------------------------------------
OSPRAY STATUS: #ospray: trying to look up renderer type 'scivis' for the first time

--------------------------------------------------
--------------------------------------------------
OSPRAY STATUS: #ospray: trying to look up material type 'scivis__OBJMaterial' for the first time

--------------------------------------------------
--------------------------------------------------
OSPRAY STATUS:   WARNING: unrecognized material type 'scivis__OBJMaterial'.

--------------------------------------------------
--------------------------------------------------
OSPRAY STATUS: #ospray: trying to look up material type 'scivis__default' for the first time

--------------------------------------------------
--------------------------------------------------
OSPRAY STATUS: #ospray: trying to look up renderer type 'pathtracer' for the first time

--------------------------------------------------
--------------------------------------------------
OSPRAY STATUS: #ospray: trying to look up material type 'pathtracer__OBJMaterial' for the first time

--------------------------------------------------

So scivis__OBJMaterial cannot be found, which seems a bit odd. Checking the relevant output of running with LD_DEBUG=libs:

      8880:     calling init: /home/melis/software/ospray-superbuild-git/lib64/libospray_module_ispc.so
      8880:     
      8880:     ./bin//ospray_render_server: error: symbol lookup error: undefined symbol: __RML_open_factory (fatal)
      8880:     ./bin//ospray_render_server: error: symbol lookup error: undefined symbol: kmp_set_thread_affinity_mask_initial (fatal)
      8880:     ./bin//ospray_render_server: error: symbol lookup error: undefined symbol: __cilkrts_watch_stack (fatal)
      8880:     /home/melis/software/ospray-superbuild-git/lib64/libospcommon.so: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
      8880:     /home/melis/software/ospray-superbuild-git/lib64/libospray_module_ispc.so: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)

So it seems there really is an issue related to the scivis OBJMaterial?

paulmelis commented 5 years ago

By the way, the ASAN error was related to the use of the wrong (system-wide) library. I no longer see it after removing the 1.8.5 package

jeffamstutz commented 4 years ago

Unless this still occurs on v2.0.0-alpha or later, I think we can consider this closed.

paulmelis commented 4 years ago

I'm still seeing this with 01a4e8490cd7bd731bb44ca4bcb94c78d39f048d

--------------------------------------------------
OSPRAY STATUS: #ospray: trying to look up material type 'scivis__OBJMaterial' for the first time

--------------------------------------------------
      6972: /home/paulm/software/ospray-superbuild-git/lib/libopenvkl_module_ispc_driver.so: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
      6972: /home/paulm/software/ospray-superbuild-git/lib/libospcommon.so: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
      6972: /home/paulm/software/ospray-superbuild-git/lib/libospray_module_ispc.so: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
--------------------------------------------------
OSPRAY STATUS:   WARNING: unrecognized material type 'scivis__OBJMaterial'.

--------------------------------------------------
jeffamstutz commented 4 years ago

Hmmm, can you provide OS/compiler information so we can better reproduce? Did you reinstall the Arch OSPRay package, or is this still without it installed?

paulmelis commented 4 years ago

GCC 9.1.0 on Arch Linux. This is not using the Arch package, but with a superbuild

jeffamstutz commented 4 years ago

Hmmm, that's the same OS/compiler setup I use on my development workstation (specifically, I use Manjaro) and don't see the same problem.

I am able to invoke the superbuild directly with:

mkdir superbuild_ospray
cd superbuild_ospray
cmake [path/to/ospray/source]/scripts/superbuild
cmake --build .

Maybe there's something else in your environment causing the issue? (likely an old OSPRay somewhere on your LD_LIBRARY_PATH?)

jeffamstutz commented 4 years ago

Oh, this isn't at build time. Do the interactive example apps work for you?

paulmelis commented 4 years ago

I'm using the same set of commands as you for building the superbuild. I don't see any strange visual artifacts or such in the examples, the OBJMaterial works. I double-checked if I have any other ospray libs lying around, but no. Library paths also seem okay:

melis@juggle 21:52:~/software/ospray-superbuild-git/bin$ ldd ./ospTutorialCylinders 
    linux-vdso.so.1 (0x00007ffe527e2000)
    libospray_testing.so.1 => /home/melis/software/ospray-superbuild-git/bin/./../lib/libospray_testing.so.1 (0x00007f22a0c55000)
    libospray.so.1 => /home/melis/software/ospray-superbuild-git/bin/./../lib/libospray.so.1 (0x00007f22a0c19000)
    libospray_imgui.so => /home/melis/software/ospray-superbuild-git/bin/./../lib/libospray_imgui.so (0x00007f22a0b52000)
    libospcommon.so => /home/melis/software/ospray-superbuild-git/bin/./../lib/libospcommon.so (0x00007f22a0b34000)
    libtbb.so => /home/melis/software/ospray-superbuild-git/bin/./../lib/libtbb.so (0x00007f22a0aef000)
    libtbbmalloc.so => /home/melis/software/ospray-superbuild-git/bin/./../lib/libtbbmalloc.so (0x00007f22a0aaa000)
    librt.so.1 => /usr/lib/librt.so.1 (0x00007f22a0a25000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f22a0a20000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f22a08e1000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f22a08c0000)
    libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x00007f22a08b3000)
    libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x00007f22a06ae000)
    libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1 (0x00007f22a04a8000)
    libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x00007f22a049c000)
    libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f22a0409000)
    libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00007f22a0398000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f22a01b0000)
    libm.so.6 => /usr/lib/libm.so.6 (0x00007f22a0068000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f22a004e000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f229fe8b000)
    /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f22a0caa000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f229fe61000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f229fe4c000)
    libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00007f229fe3d000)
    libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00007f229fc37000)
    libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007f229fc04000)
    libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007f229fb48000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f229fb43000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f229fb39000)

I can reproduce this with the ospTutorialCylinders example:

melis@juggle 21:53:~/software/ospray-superbuild-git/bin$ ./ospTutorialCylinders --osp:debug 2>&1 | grep -i warning
  WARNING: unrecognized material type 'scivis__OBJMaterial'.
  WARNING: unrecognized material type 'scivis__OBJMaterial'.

It's really weird, the actual libs used look fine with respect to the location:

melis@juggle 21:54:~/software/ospray-superbuild-git/bin$ LD_DEBUG=libs ./ospTutorialCylinders 2>&1 |grep -i libosp
     12887: find library=libospray_testing.so.1 [0]; searching
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/tls/haswell/x86_64/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/tls/haswell/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/tls/x86_64/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/tls/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/haswell/x86_64/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/haswell/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/x86_64/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/tls/haswell/x86_64/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/tls/haswell/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/tls/x86_64/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/tls/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/haswell/x86_64/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/haswell/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/x86_64/libospray_testing.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/libospray_testing.so.1
     12887: find library=libospray.so.1 [0]; searching
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/libospray.so.1
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/libospray.so.1
     12887: find library=libospray_imgui.so [0]; searching
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/libospray_imgui.so
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/libospray_imgui.so
     12887: find library=libospcommon.so [0]; searching
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/libospcommon.so
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/libospcommon.so
     12887: calling init: /home/melis/software/ospray-superbuild-git/bin/../lib/libospcommon.so
     12887: calling init: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_imgui.so
     12887: calling init: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray.so.1
     12887: calling init: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_testing.so.1
     12887: find library=libospray_module_ispc.so [0]; searching
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/libospray_module_ispc.so
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/libospray_module_ispc.so
     12887: calling init: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_module_ispc.so
     12887: find library=libospray_testing.so [0]; searching
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/libospray_testing.so
     12887:   trying file=/home/melis/software/ospray-superbuild-git/bin/../lib/libospray_testing.so
     12887: /home/melis/software/ospray-superbuild-git/bin/../lib/libospcommon.so: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
     12887: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_module_ispc.so: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
     12887: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_testing.so.1: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
     12887: /home/melis/software/ospray-superbuild-git/bin/../lib/libospcommon.so: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
     12887: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_module_ispc.so: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
     12887: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_testing.so.1: error: symbol lookup error: undefined symbol: ospray_create_material__scivis__OBJMaterial (fatal)
     12887: calling fini: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_testing.so.1 [0]
     12887: calling fini: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_imgui.so [0]
     12887: calling fini: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray_module_ispc.so [0]
     12887: calling fini: /home/melis/software/ospray-superbuild-git/bin/../lib/libospray.so.1 [0]
     12887: calling fini: /home/melis/software/ospray-superbuild-git/bin/../lib/libospcommon.so [0]

I also had just cleaned (rm -rf) my superbuild and rebuilt it, as I find it doesn't reliably rebuild after a git update.

And I really see no symbol ospray_create_material__scivis__OBJMaterial in any of the libs:

melis@juggle 21:56:~/software/ospray-superbuild-git/bin$ grep ospray_create_material__scivis__OBJMaterial ../lib/lib*
melis@juggle 21:56:~/software/ospray-superbuild-git/bin$ 
jeffamstutz commented 4 years ago

We have simplified our material creation in v2.0, so I believe this is obsolete. We used to have a fallback mechanism that would attempt to create a "default" material if the input string wasn't a valid material. We changed this to be a hard error now, in favor of consistency and being less surprising.

FYI, only "obj" is supported as a scivis material type (i.e. "OBJMaterial" is not a valid string).