joe-jordan / pyvoro

2D and 3D Voronoi tessellations: a python entry point for the voro++ library
Other
100 stars 26 forks source link

ImportError on Python 2.6 #4

Closed jjmaldonis closed 10 years ago

jjmaldonis commented 10 years ago

I am running on a ROCKS 6.1, which is CentOS 6.3 (Linux). Versions: Python 2.6.6 (r266:84292, Sep 11 2012, 08:34:23) Cython version 0.20.1 gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)

This is what I did: git clone https://github.com/joe-jordan/pyvoro.git cd pyvoro (Here I had to modify _linker_vars(...) in cb.py. Namely, I changed LDCXXSHARED to LDSHARED, after looking here: http://bugs.python.org/file16742/distutils2-C%2B%2B.patch) python setup.py build sudo python setup.py install

Open new terminal: python

import pyvoro Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.6/site-packages/pyvoro/init.py", line 1, in import voroplusplus ImportError: /usr/lib/python2.6/site-packages/pyvoro/voroplusplus.so: undefined symbol: _ZTVN10cxxabiv120si_class_type_infoE

joe-jordan commented 10 years ago

Thanks for the detailed bug report.

I will see what I can do about reproducing it in a Linux environment with python 2.6; but the answer may well be to just update to 2.7. CentOS should be able to handle 2 python versions side by side, most distributions can.

I'll post more information when I've tried to reproduce this same error.

joe-jordan commented 10 years ago

This was actually a bug in my other project, complicated_build, where C++ projects would get None instead of a valid linker. @refreshx2 's patch for this, to use the C linker, works fine except that the library isn't linked against the C++ standard library/runtime, hence the missing symbol error. I've modified it to manually link against the C++ runtime in this specific case, so cb is now "2.6-proof".

To get pyvoro building properly, you will need to clear all caches (removing both cb.py and the build folder) and then follow the install steps again. This should finally work!

Note that you can also install cb properly using a similar procedure from its homepage. It has been designed to be "embeddable" like this, which is only any good when it is reliable (clearing out old cached versions from 5 different projects is pretty tedious.)