compil_pyml

PyML

> cd src/PyML-0.6.15
> python setup.py build

lorsqu'on a cette erreur:

> python setup.py build                                                         running build
running build_py
running build_ext
building 'PyML/ext/_libsvm' extension
C compiler: /usr/lib/python2.4/pycc -DNDEBUG

compile options: '-I/usr/include/python2.4 -c'
pycc: PyML/ext/libsvm.cpp
cc: No input file specified, no output generated
cc: No input file specified, no output generated
error: Command "/usr/lib/python2.4/pycc -DNDEBUG -I/usr/include/python2.4 -c PyML/ext/libsvm.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/libsvm.o" failed with exit status 1

c'est parce qu'il utilise pycc au lieu de pyCC!

> /usr/lib/python2.4/pyCC -DNDEBUG -I/usr/include/python2.4 -c PyML/ext/libsvm_wrap.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/libsvm_wrap.o

il faut aller voir dans les distutils de pynum pour comprendre ce qui se passe?!

> cd src/PyML-0.6.15
> /opt/csw/bin/python setup.py build

lorsqu'on a cette erreur:

> python setup.py build                                                         running build
running build_py
running build_ext
building 'PyML/ext/_libsvm' extension
C compiler: /usr/lib/python2.4/pycc -DNDEBUG

compile options: '-I/usr/include/python2.4 -c'
pycc: PyML/ext/libsvm.cpp
cc: No input file specified, no output generated
cc: No input file specified, no output generated
error: Command "/usr/lib/python2.4/pycc -DNDEBUG -I/usr/include/python2.4 -c PyML/ext/libsvm.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/libsvm.o" failed with exit status 1

c'est parce qu'il utilise pycc au lieu de pyCC!

> /usr/lib/python2.4/pyCC -DNDEBUG -I/usr/include/python2.4 -c PyML/ext/libsvm_wrap.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/libsvm_wrap.o

il faut aller voir dans les distutils de pynum pour comprendre ce qui se passe?!

PyML -0.6.15 ne compile pas sous Solaris 10 avec la commande classique:

python setup build

creating build/temp.solaris-2.10-i86pc-2.5
creating build/temp.solaris-2.10-i86pc-2.5/PyML
creating build/temp.solaris-2.10-i86pc-2.5/PyML/ext
compile options: '-I/opt/csw/include/python2.5 -c'
cc: PyML/ext/libsvm_wrap.cpp
cc: No input file specified, no output generated
cc: No input file specified, no output generated
error: Command "cc -DNDEBUG -xO3 -xtarget=generic -xarch=generic -I/opt/csw/include/python2.5 -c PyML/ext/libsvm_wrap.cpp -o build/temp.solaris-2.10-i86pc-2.5/PyML/ext/libsvm_wrap.o" failed with exit status 1 

Le problème n'est pas lié à Python, mais plutôt aux distutils.
Le développeur du module m'a envoyé un fichier Makefile qui n'est pas à jour. J'ai donc installé PyML sur une debian, et relevé les lignes de compilation, pour les utiliser sur le serveur solaris.

  • il faut faire des modifications
  • que ce soit avec gcc3 ou gcc4.0.2, ça ne passe pas.

Par exemple, avec gcc4.1.2 sur debian, l'erreur consistant à ne pas déclarer une variable n'est pas détectée! On peut faire la modif suivante dans le fichier PyML/ext/FeatureVector.cpp, en commentant la ligne

  //cout << "index: " << index << endl;


Par contre, pour cette erreur:

ld: fatal: relocation error: file: build/temp.solaris-x86-2.4/PyML/ext/SparseDataSet.o section: .rel.debug_info symbol: : symbol has been discarded with discarded section: .gnu.linkonce.t._ZSt6fill_nIPijiET_S1_T0_RKT1_
collect2: ld returned 1 exit status
ld: fatal: relocation error: file: build/temp.solaris-x86-2.4/PyML/ext/VectorDataSet.o section: .rel.debug_info symbol: : symbol has been discarded with discarded section: .gnu.linkonce.t._ZSt6fill_nIPijiET_S1_T0_RKT1_
collect2: ld returned 1 exit status

peut etre lié à ce probleme

hack dans le script setup.py

trouvé par N. Ollinger, permet d'avancer dans la compilation, mais maintenant, c'est un flag à l'édition de liens qui manque. De plus, il a fallu modifier un fichier à cause de hash_map

> python setup.py build --debug
running build
running build_py
running build_ext
building 'PyML/ext/_mylibsvm' extension
C compiler: /usr/lib/python2.4/pyCC

compile options: '-g -I/usr/include/python2.4 -c'
pyCC: PyML/ext/mylibsvm_wrap.cpp
"PyML/ext/SparseDataSet.h", line 14: Error: Could not open include file<hash_map>.
"PyML/ext/SparseDataSet.h", line 27: Error: hash_map is not a member of std.
"PyML/ext/SparseDataSet.h", line 44: Error: A class template name was expected instead of hash_map.
3 Error(s) detected.
"PyML/ext/SparseDataSet.h", line 14: Error: Could not open include file<hash_map>.
"PyML/ext/SparseDataSet.h", line 27: Error: hash_map is not a member of std.
"PyML/ext/SparseDataSet.h", line 44: Error: A class template name was expected instead of hash_map.
3 Error(s) detected.
error: Command "/usr/lib/python2.4/pyCC -g -I/usr/include/python2.4 -c PyML/ext/mylibsvm_wrap.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/mylibsvm_wrap.o" failed with exit status 3

Pour hash_map, il faut linker avec “-library=stlport4”, mais impossible de lui faire rajouter cet argument!?

Si on le fait manuellement, on arrive a compiler et installer pyml:

> cp -rp PyML-0.6.15/setup.py PyML-0.6.15/setup.py.ori
> cd PyML-0.6.15/PyML/ext/
> cp -rp SMO.h SMO.h.ori
> cp -rp Gist.h Gist.h.ori
> cp -rp KernelCache.h KernelCache.h.ori
> cp -rp SparseDataSet.h SparseDataSet.h.ori
> cp -rp PyML/ext/FeatureVector.cpp PyML/ext/FeatureVector.cpp.ori              

> cp PyML-0.6.15.old/setup.py PyML-0.6.15/
> cp PyML-0.6.15.old/PyML/ext/SMO.h PyML-0.6.15/PyML/ext/
> cp PyML-0.6.15.old/PyML/ext/Gist.h PyML-0.6.15/PyML/ext/
> cp PyML-0.6.15.old/PyML/ext/KernelCache.h PyML-0.6.15/PyML/ext/
> cp PyML-0.6.15.old/PyML/ext/SparseDataSet.h PyML-0.6.15/PyML/ext/

pour tester:

> cd data/
> pwd
/local/apps/src/PyML-0.6.15
> python
Python 2.4.4 (#1, Jan  9 2007, 23:31:33) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> from PyML import *
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/local/apps/lib/lib/python2.4/site-packages/PyML/datafunc.py", line 2, in ?
    import arrayWrap
  File "/local/apps/lib/lib/python2.4/site-packages/PyML/arrayWrap.py", line 2, in ?
    from ext import csparsedataset
  File "/local/apps/lib/lib/python2.4/site-packages/PyML/ext/csparsedataset.py", line 7, in ?
    import _csparsedataset
ImportError: ld.so.1: python2.4: fatal: relocation error: file /local/apps/lib/lib/python2.4/site-packages/PyML/ext/_csparsedataset.so: symbol __1cDstd2l6Frn0ANbasic_ostream4Ccn0ALchar_traits4Cc____pkc_2_: referenced symbol not found

s'agit il d'un problème de compatibilité entre librairies?. On vérifie que les patches sont tous appliqués sur nemo, et on se reporte à la faq de sun studio.
Il faudrait vérifier que la compilation du .so est correcte:

 CC -G -features=extensions -compat=5 -library=iostream build/temp.solaris-2.10-i86pc-2.4/PyML/ext/SparseDataSet_wrap.o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/SparseDataSet.o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/DataSet.o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/SparseFeatureVector.o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/Kernel.o -o build/lib.solaris-2.10-i86pc-2.4/PyML/ext/_csparsedataset.so

mais aussi que les objets ont bien été compilés avec stlport4?

références

  • compil_pyml.txt
  • Dernière modification : 2017/08/25 09:56
  • de 127.0.0.1