Bug#773424: vtk6 has the wrong library paths for vt libraries; using full paths to dlopen instead of library names

Ansgar Burchardt ansgar at debian.org
Sun Dec 28 20:08:50 UTC 2014


Hi,

Don Armstrong <don at debian.org> writes:
> $ echo 'package require vtk'|vtk6
> couldn't load file "/usr/lib/libvtkCommonCoreTCL-6.1.so":
> /usr/lib/libvtkCommonCoreTCL-6.1.so: cannot open shared object file:
> No such file or directory
[...]
> I suspect that something is giving a full path to dlopen instead of a
> library name, and fixing that will solve this problem.

I think the problem is in /usr/lib/tcltk/vtk-6.1/pkgIndex.tcl:

+---
|   namespace eval ::vtk::init {
|     proc load_library_package {libName libPath {libPrefix {lib}}} {
|       #first try to load a static package, then try the shared package.
|       if {[catch "load {} $libName"]} {
|         set libExt [info sharedlibextension]
|         set currentDirectory [pwd]
|         set libFile [file join $libPath "$libPrefix$libName-6.1$libExt"]
|         if {[catch "cd {$libPath}; load {$libFile}" errorMessage]} {
+---

So load_library_package is looking in a specific location for the shared
libraries, and later:

+---
|     ::vtk::init::load_library_package {vtk${kit}TCL} {[file dirname [file dirname [file dirname [info script]]]]}
+---

I assume `[info script]' refers to /usr/lib/tcltk/vtk-6.1/pkgIndex.tcl,
so this should look in /usr/lib and not the correct (multi-arch)
location.

As an alternative to changing this and if lib*TCL-6.1.so are not used
otherwise, one could move the shared objects out of the multi-arch
location to /usr/lib and into the tcl-vtk6 package.

Ansgar



More information about the debian-science-maintainers mailing list