[Therion] Therion fails to compile with vtk 6

Bill Gee bgee at campercaver.net
Thu Dec 18 18:02:50 CET 2014


Hi Olly -

I finally got some time today to spend on this.  It is still not working, but 
the needle has been moved!  Once again I get a different error.  I think 
progress is being made ...

On my Fedora 21 system vtk is version 6.1.0.  It is installed in 
/usr/lib64/vtk and /usr/include/vtk.  When I ran make with these two paths 
specified on the command line, I got the same result as below.  Six libraries 
with names ending in "-6.1" could not be found.

I modified the loch Makefile as shown here.  I used hard-coded pathnames for 
VTKPATH and VTKLIBPATH.  I also remove "-6.1" from the library names in the 
VTKLIBS line.

=============
# VTKVERSION = 5.4
VTKVERSION = $(shell tclsh ./getvtkver.tcl version)
# VTKPATH = /usr/local/include/vtk-$(VTKVERSION)
# VTKPATH = $(shell tclsh ./getvtkver.tcl incpath)
VTKPATH = /usr/include/vtk
# VTKLIBPATH = /usr/local/lib/vtk-$(VTKVERSION)
# VTKLIBPATH = $(shell tclsh ./getvtkver.tcl libpath)
VTKLIBPATH = /usr/lib64/vtk
VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -
lvtkCommon -lvtkjpeg -lvtkpng -lvtkzlib -lvtksys -lfreetype
POSTMAKE =
STRIPFLAG = -s

[...  snip ...]

# PLATFORM DEBIAN
CXX = c++
CC = gcc
POBJECTS = lxR2P.o
## VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -
lvtkCommon -lfreetype
VTKLIBS = -lvtkCommonExecutionModel -lvtkCommonDataModel -lvtkCommonCore -
lvtkFiltersCore -lvtkFiltersHybrid -lvtkIOLegacy -lfreetype
## CXXPFLAGS = -DLXLINUX $(shell wx-config --cxxflags) -Wno-deprecated $(shell 
freetype-config --cflags) -I$(VTKPATH)
CXXPFLAGS = -DLXLINUX $(shell wx-config --cxxflags) $(shell freetype-config --
cflags) -I$(VTKPATH)
CCPFLAGS = -DLXLINUX  $(shell wx-config --cflags)
LXLIBDIR = linux
PLIBS = $(shell wx-config --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) -lGLU -
lpthread -lz 
LXPLATFORM = LINUX
====================

This runs almost all the way through.  At the end it complains about an 
undefined symbol reference.  Here are the last few lines of output:

====================
gcc -c -Wall -D_GNU_SOURCE -DLOCH -DLXLINUX  -I/usr/lib64/wx/include/gtk2-
unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -
D_LARGE_FILES -D__WXGTK__ -pthread  -o .././loch/img.o img.c
c++ -o .././loch/loch -Wall .././loch/lxR2P.o .././loch/lxTR.o 
.././loch/lxOGLFT.o .././loch/lxSetup.o .././loch/lxRender.o .././loch/lxWX.o 
.././loch/lxImgIO.o .././loch/lxLRUD.o .././loch/lxFile.o .././loch/lxSTree.o 
.././loch/lxData.o .././loch/lxMath.o .././loch/lxSView.o .././loch/lxSScene.o 
.././loch/lxGUI.o .././loch/lxGLC.o .././loch/lxOptDlg.o 
.././loch/lxAboutDlg.o .././loch/img.o -lwx_gtk2u_gl-2.8 -pthread -Wl,-z,relro   
-lwx_gtk2u_richtext-2.8 -lwx_gtk2u_aui-2.8 -lwx_gtk2u_xrc-2.8 -
lwx_gtk2u_qa-2.8 -lwx_gtk2u_html-2.8 -lwx_gtk2u_adv-2.8 -lwx_gtk2u_core-2.8 -
lwx_baseu_xml-2.8 -lwx_baseu_net-2.8 -lwx_baseu-2.8  -L/usr/lib64/vtk -
lvtkCommonExecutionModel -lvtkCommonDataModel -lvtkCommonCore -lvtkFiltersCore 
-lvtkFiltersHybrid -lvtkIOLegacy -lfreetype -lGLU -lpthread -lz  -s
/usr/bin/ld: .././loch/lxRender.o: undefined reference to symbol 
'png_write_row@@PNG16_0'
/lib64/libpng16.so.16: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:129: recipe for target '.././loch/loch' failed
make: *** [.././loch/loch] Error 1
=====================

This looks to me like vtk is no longer a problem.  Now it is something to do 
with libpng16.

Regards - Bill Gee


On Tuesday, December 16, 2014 03:15:37 Olly Betts wrote:
> On Mon, Dec 15, 2014 at 07:32:53PM -0600, Bill Gee wrote:
> > I took a stab at changing the loch Makefile manually.  It still fails, but
> > now it has yet another message.  Here is the last few bits from the
> > compile run.
> > 
> > ==================/usr/lib64/
> > gcc -c -Wall -D_GNU_SOURCE -DLOCH -DLXLINUX  -I/usr/lib64/wx/include/gtk2-
> > unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -
> > D_LARGE_FILES -D__WXGTK__ -pthread  -o .././loch/img.o img.c
> > c++ -o .././loch/loch -Wall .././loch/lxR2P.o .././loch/lxTR.o
> > .././loch/lxOGLFT.o .././loch/lxSetup.o .././loch/lxRender.o
> > .././loch/lxWX.o .././loch/lxImgIO.o .././loch/lxLRUD.o
> > .././loch/lxFile.o .././loch/lxSTree.o .././loch/lxData.o
> > .././loch/lxMath.o .././loch/lxSView.o .././loch/lxSScene.o
> > .././loch/lxGUI.o .././loch/lxGLC.o .././loch/lxOptDlg.o
> > .././loch/lxAboutDlg.o .././loch/img.o -lwx_gtk2u_gl-2.8 -pthread
> > -Wl,-z,relro -lwx_gtk2u_richtext-2.8 -lwx_gtk2u_aui-2.8
> > -lwx_gtk2u_xrc-2.8 -
> > lwx_gtk2u_qa-2.8 -lwx_gtk2u_html-2.8 -lwx_gtk2u_adv-2.8
> > -lwx_gtk2u_core-2.8 - lwx_baseu_xml-2.8 -lwx_baseu_net-2.8 -lwx_baseu-2.8
> >  -L/usr/lib/vtk-5.4 - lvtkCommonExecutionModel-6.1
> > -lvtkCommonDataModel-6.1 -lvtkCommonCore-6.1 - lvtkFiltersCore-6.1
> > -lvtkFiltersHybrid-6.1 -lvtkIOLegacy-6.1 -lfreetype -lGLU -lpthread -lz 
> > -s
> > /usr/bin/ld: cannot find -lvtkCommonExecutionModel-6.1
> > /usr/bin/ld: cannot find -lvtkCommonDataModel-6.1
> > /usr/bin/ld: cannot find -lvtkCommonCore-6.1
> > /usr/bin/ld: cannot find -lvtkFiltersCore-6.1
> > /usr/bin/ld: cannot find -lvtkFiltersHybrid-6.1
> > /usr/bin/ld: cannot find -lvtkIOLegacy-6.1
> > collect2: error: ld returned 1 exit status
> > make[1]: *** [.././loch/loch] Error 1
> > make[1]: Leaving directory `/home/bgee/Installs/therion/loch'
> > make: *** [loch/loch] Error 2
> > ======================
> > 
> > I noticed a section at the top of the Loch Makefile where it is using some
> > tcl programs to find where vtk is installed.  This starts on line 14.  On
> > my systems the three tcl programs return data as if vtk 5.4 were
> > installed.  The system has no trace of vtk 5.4 left on it.  The two
> > directories returned for VTKPATH and VTKLIBPATH do not exist.  Will this
> > cause any problems?
> Looking at getvtkver.tcl it assumes 5.4 if it can't find a vtk install,
> so I suspect that's what is happening for you.
> 
> On Debian unstable, VTKPATH is /usr/include/vtk-6.1 (correct) but
> VTKLIBPATH is /usr/lib/vtk-6.1 (wrong).  But the latter doesn't matter,
> as the libraries are in /usr/lib/x86_64-linux-gnu which is on the
> default linker search path, so are found anyway.
> 
> It looks like your build finds the headers (so VTKPATH isn't a problem)
> but fails to find the libraries when it comes to link.  If you can
> determine the correct directory, you can probably override by passing it
> on the command line, like so:
> 
> make VTKLIBPATH=/usr/lib64/vtk6.1
> 
> Cheers,
>     Olly




More information about the Therion mailing list