Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec Pymat

2 réponses
Avatar
Christophe
Bonjour,

Je cherche à faire fonctionner le module Pymat pour pouvoir contrôler
Matlab à partir de Python.

Je dispose de la version 6.5 de Matlab, de la version 2.2.3 de Python et
tout cela sous linux.

J'ai installé la dernière version de numarray qui est censé remplacer
Numeric et j'ai tenté de compiler pymat :
gcc -c pymat.cpp -I/usr/include/python2.2
-I/users/m024234/local/include/-I/appli/matlab/v6.5/extern/include -fPIC

Boum ! je vois dans le code qu'il fait appel à Numeric, donc je remplace
Numeric par numarray et je relance la compilation :

pymat.cpp: Dans function « mxArray* makeMxFromNumeric(const
PyArrayObject*)»:
pymat.cpp:216: valeur de « case » double
pymat.cpp:212: précédemment utilisé ici
pymat.cpp:232: valeur de « case » double
pymat.cpp:228: précédemment utilisé ici
pymat.cpp: Dans function « mxArray* numeric2mx(const PyObject*) »:
pymat.cpp:291: conversion invalide de « const PyObject* » vers «
PyObject* »

Bon effectivement il semble qu'il y ait des types qui sont identiques,
donc je mets en commentaires les doublons et je relance, cette fois ça
marche : pas de message d'erreur. Donc je lance l'édition de liens :

gcc -shared -o pymat.so -L/appli/matlab/v6.5/extern/lib/glnx86 -lut
-leng-lmx -lmat

Pas de message d'erreur : j'ai bien mon pymat.so

Mais tout se complique lorsque j'essaye de l'utiliser :

Python 2.2.3 (#1, Aug 8 2003, 08:44:02)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymat.so
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: dynamic module does not define init function (initpymat)
>>>

Là je sèche un peu : je ne vois pas d'où provient mon erreur (je ne suis
pas très familier avec les messages d'erreurs de Python...).

Quelqu'un aurait-il réussi à faire fonctionner Pymat ?

Merci d'avance à ceux qui pourront me dépanner...

2 réponses

Avatar
Christophe
On Thu, 29 Jul 2004 01:31:46 +0200, Christophe
wrote :

Bon effectivement il semble qu'il y ait des types qui sont identiques,
donc je mets en commentaires les doublons et je relance, cette fois ça
marche : pas de message d'erreur. Donc je lance l'édition de liens :

gcc -shared -o pymat.so -L/appli/matlab/v6.5/extern/lib/glnx86 -lut
-leng-lmx -lmat


Boum ! C'est là qu'était mon erreur : j'avais bêtement oublié de
spécifier pymat.o et la librairie libstdc++, la bonne commande est donc
:

gcc pymat.o -shared -o pymat.so -L/appli/matlab/v6.5/extern/lib/glnx86
-lut-leng-lmx -lmat -lstdc++

Et ensuite cela marche impeccable : je communique avec Matlab !

Avatar
Christophe Cavalaria
Christophe wrote:

On Thu, 29 Jul 2004 01:31:46 +0200, Christophe

Bon effectivement il semble qu'il y ait des types qui sont identiques,
donc je mets en commentaires les doublons et je relance, cette fois ça
marche : pas de message d'erreur. Donc je lance l'édition de liens :

gcc -shared -o pymat.so -L/appli/matlab/v6.5/extern/lib/glnx86 -lut
-leng-lmx -lmat


Boum ! C'est là qu'était mon erreur : j'avais bêtement oublié de
spécifier pymat.o et la librairie libstdc++, la bonne commande est donc
:

gcc pymat.o -shared -o pymat.so -L/appli/matlab/v6.5/extern/lib/glnx86
-lut-leng-lmx -lmat -lstdc++

Et ensuite cela marche impeccable : je communique avec Matlab !


Pour du code c++, il vaut mieux compiler et lier avec g++ que avec gcc. Ce
dernier ne met pas automatiquement un certain nombre d'options comme
justement -lstdc++