[opensource-dev] Library Refresh viewer

Henri Beauchamp sldev at free.fr
Tue Jul 15 07:59:27 PDT 2014


On Thu, 10 Jul 2014 13:03:27 -0400, Oz Linden (Scott Lawrence) wrote:

> As many of you have seen, Monty has recently updated the versions of 
> several of the libraries we use in the viewer.  We've now published a 
> Project viewer with those changes:
> 
>     https://wiki.secondlife.com/wiki/Linden_Lab_Official:Alternate_Viewers#Second_Life_Project_Refresh_Channel
> 
> Any testing you can do with that viewer would be a big help.

When checking for the system libraries that the viewer depends on, on my
main Linux system (Rosa Marathon 2012), I get this:

# LD_LIBRARY_PATH="`pwd`/lib:$LD_LIBRARY_PATH" ldd bin/do-not-directly-run-secondlife-bin | sort | grep -v Second_Life_Project_Refresh
        libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb3bd6000)
        libbz2.so.1 => /usr/lib/libbz2.so.1 (0xb665a000)                  <--- (1)
        libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb3c03000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0xb3a0c000)
        libc.so.6 => /lib/i686/libc.so.6 (0xb6683000)
        libdl.so.2 => /lib/libdl.so.2 (0xb69e5000)
        libffi.so.5 => /usr/lib/libffi.so.5 (0xb6653000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb69af000)    <--- (3)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb76a2000)        <--- (3)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0xb6800000)
        libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb3e11000)
        libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb6e79000)
        libgio-2.0.so.0 => /lib/libgio-2.0.so.0 (0xb3cbc000)
        libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb74f5000)
        libGL.so.1 => /usr/lib/libGL.so.1 (0xb736a000)
        libGLU.so.1 => /usr/lib/libGLU.so.1 (0xb7482000)
        libgmodule-2.0.so.0 => /lib/libgmodule-2.0.so.0 (0xb3ba3000)
        libgobject-2.0.so.0 => /lib/libgobject-2.0.so.0 (0xb75ed000)
        libgthread-2.0.so.0 => /lib/libgthread-2.0.so.0 (0xb6e76000)
        libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb6a15000)
        /lib/ld-linux.so.2 (0xb77cd000)
        libm.so.6 => /lib/i686/libm.so.6 (0xb681e000)
        libnvidia-glcore.so.340.24 => /usr/lib/libnvidia-glcore.so.340.24 (0xb407d000)
        libnvidia-tls.so.340.24 => /usr/lib/tls/libnvidia-tls.so.340.24 (0xb6610000)
        libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb3e6d000)
        libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb3eb8000)
        libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb3ba8000)
        libpcre.so.0 => /usr/lib/libpcre.so.0 (0xb6615000)                 <--- (3)
        libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0xb391f000)
        libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb39bb000)               <--- (2)
        libpthread.so.0 => /lib/i686/libpthread.so.0 (0xb7736000)
        libresolv.so.2 => /lib/libresolv.so.2 (0xb39a2000)
        librt.so.1 => /lib/i686/librt.so.1 (0xb7698000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb6848000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb7230000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb3a08000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb404a000)
        libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0xb3e40000)
        libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb3e44000)
        libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0xb3e3b000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb3a01000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb406a000)
        libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb3e35000)
        libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb3e68000)
        libXi.so.6 => /usr/lib/libXi.so.6 (0xb3e58000)
        libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb3a56000)                 <--- (2)
        libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb3e4f000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb3bf7000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb666b000)                       <--- (3)
        linux-gate.so.1 =>  (0xb77cc000)

The "<---" indicate issues with libraries that should (or would better
not) not appear, since static versions were linked to the viewer at
compile time, with:
(1) may be only consumed by /usr/lib/libfreetype.so.6
(2) consumed by the system's GTK+ v2 libraries
(3) unknown, probably multiple consumers.

Some dependencies are second level ones that result from the fact that
the v3 viewer still uses the GTK+ libraries, but may still cause issues,
such as with libpng (v1.2 on the system, v1.6 in the statically linked
library used by the viewer: this is often the cause for crashes in the
GTK+ file selector), thus why I got rid of that GTK+ dependency in the
Cool VL Viewer...

Once the new libraries adopted and code changes backported to the Cool VL
Viewer, I get this list of dependencies:

# LD_LIBRARY_PATH="`pwd`/lib:$LD_LIBRARY_PATH" ldd bin/cool_vl_viewer-bin | sort | grep -v CoolVLViewer
        libbz2.so.1 => /usr/lib/libbz2.so.1 (0xb41bf000)                  <--- (1)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0xb41f4000)
        libc.so.6 => /lib/i686/libc.so.6 (0xb6bb2000)
        libdl.so.2 => /lib/libdl.so.2 (0xb6e64000)
        libffi.so.5 => /usr/lib/libffi.so.5 (0xb6bab000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb6f21000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb438b000)        <--- (3)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0xb6d2f000)
        libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb75a8000)
        libGL.so.1 => /usr/lib/libGL.so.1 (0xb741e000)
        libGLU.so.1 => /usr/lib/libGLU.so.1 (0xb7535000)
        libgobject-2.0.so.0 => /lib/libgobject-2.0.so.0 (0xb76a1000)
        libgthread-2.0.so.0 => /lib/libgthread-2.0.so.0 (0xb6f1e000)
        /lib/ld-linux.so.2 (0xb7776000)
        libm.so.6 => /lib/i686/libm.so.6 (0xb6d4c000)
        libnvidia-glcore.so.340.24 => /usr/lib/libnvidia-glcore.so.340.24 (0xb45d5000)
        libnvidia-tls.so.340.24 => /usr/lib/tls/libnvidia-tls.so.340.24 (0xb6b68000)
        libpcre.so.0 => /usr/lib/libpcre.so.0 (0xb6b6d000)                <--- (3)
        libpthread.so.0 => /lib/i686/libpthread.so.0 (0xb6e94000)
        librt.so.1 => /lib/i686/librt.so.1 (0xb76ef000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb6d76000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb72e4000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb41f0000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb45a2000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb41e9000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb45c2000)
        libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb423e000)                <--- (3)
        libz.so.1 => /usr/lib/libz.so.1 (0xb41d1000)                      <--- (3)
        linux-gate.so.1 =>  (0xb7775000)

That's much better (thanks to the absence of the old GTK+ v2 stuff),
but there are still issues with libfreetype (and associated libbz2),
libz, libxml2 and (new when compared to binaries compiled with the
old set of libraries), with libpcre (which used to be distributed
with the viewer, in its lib/ directory).
Note that I did not point the libfontconfig.so.1 line because I don't
distribute it with the Cool VL Viewer package (including it in the
viewer's lib/ directory caused issues for some users in the past, and
libfontconfig is pretty much an universal pre-requisite on any Linux
distro, meaning it's always present in /usr/lib).

This raises the question whether or not using static libraries to
compile the viewer, for the ones that might conflict with their
dynamic counterparts that get loaded at runtime anyway (especially
libpcre, libxml2 and libz)...

Henri.


More information about the opensource-dev mailing list