Et oui, ça devait arriver un jour: j'ai fait le portage .NET 2005. Pour vous motiver à passer à ce compilateur, j'ai remarqué des gains CPU jusqu'à 30% sur certains cas tests (apps.qs.tube
p.expl) !
Normalement, la version actuelle du source compile toujours avec le .NET 2003, l'ancien python et l'ancien SWIG. Mais je pense qu'il est important de mettre à jour toutes vos libs rapidement (pour Vista). Comptez au minimum 1 journée de travail avec ce guide (et pensez qu'il m'en a fallu 4!).
assert
s très pratiques partout)exe.local
(ceci à cause des “manifest”, voir plus loin). Ce n'est pas un problème.qmap.h
et qhash.h
- voir DVD Metafor). [corrigé dans Qt-4.3.0!]const
dans le source ou ça plante (vtkPythonUtil.cxx
). [corrigé dans vtk-5.0.3!]vcproj
automatiquement. Il faut juste changer le répertoire de destination des DLLs (à côté de Metafor.exe) et remouliner les projets Qt avec qmake
. Pas de problèmes majeurs à signaler mis à part mes beaux itérateurs (ElementIterator
) qui ne compilent plus lorsqu'ils sont utilisé dans des boucles std::for_each
. J'ai aussi dû modifier certains prototypes de fonctions de mtShapeFunctions
et nurbs++
pour que les DLLs fonctionnent. mtQt
et gengui
ne fonctionnent plus (même si elles sont activées). Pour résoudre ça, il suffit de supprimer les 2 projets de la solution, la sauver, fermer le visual, le réouvrir, ajouter les 2 projets et recréer les dépendances. unresolved symbols
à la figure. J'utilise une version 4 modifiée et j'ai fait un projet à la main. Cette version est dispo sur le DVD Metafor.Metafor.exe
à ce moment, seule la version release fonctionne (mis à part apps.complex
- voir plus loin). C'est ennuyeux, surtout que le plantage de la version debug n'est pas claire du tout (ça dit juste qu'un module inconnu a tenté de charger une mauvaise version de la CRT et que je peux contacter l'équipe de développement du programme pour en savoir plus). Le problème est en fait double: il vient d'une part de PetSc et d'autre part de python.python_d.exe
. On se retrouve avec un problème de signaux. Là encore, les développeurs de python s'en foutent royalement (“c'est la faute à Micro$oft que personne n'utilise donc on corrige pas et on attend le service pack suivant”). En ce qui nous concerne, je nous vois mal attendre 1 an sans debuguer Metafor (ou pire debuguer a coup de ladebug
) donc j'ai fouillé le net et j'ai touvé un patch (voir DVD Metafor) qui fonctionne assez bien. Il suffit de patcher pythonrun.c
en faisant patch < pythonrun.diff
et recompiler tout. Ouf! [corrigé dans Python-2.5!]PyRun_SimpleFile
(voir cet article). Symptome: apps.complex
plante… Recompilez python24.dll
et écrasez brutalement c:\windows\system32\python24.dll
(ou arrangez vous pour que votre Metafor charge celui-là. Ouf bis!mtFEM.dll.manifest
). Il est d'ailleurs possible d'obtenir de magnifiques plantages très vraiés en modifiant ce fichier à la main). Chaque bibliothèque doit donc avoir son “manifest” pour charger la bonne CRT. Microsoft explique que ça permet plein de trucs, entre autres ca règle les conflits de DLL (le fameux DLL Hell) ou l'installation “locale” d'une application sans privilèges administrateur (mieux vaut tout de même avoir les connaissances d'un administrateur pour le faire)… Pour ce qui nous concerne, ça se rémume à “PetSc n'a pas de manifest, donc PetSc va tout faire planter” (en debug seulement - je sais pas pourquoi). Il faut donc recompiler PetSc avec vs2005 alors qu'il n'a pas été prévu pour ça. En pratique, c'est simple mais comme chaque tentative est très longue, c'est très très long (près de 3h sur mon PC)! garfield4.py
(sur le DVD Metafor). J'ai un petit mémo qui détaille la procédure. J'ai utilisé la toute dernière version (2.3.2p8) mais le source reste compilable avec la version 2.3.0 (à l'aide de qq #ifdef
).numarray
(obsolete).numarray
, etc), désinstaller Python-2.4 (et supprimer les DLLs de python qui trainent un peu partout). N'oubliez pas votre version debug. Ensuite, installez les binaires Windows.PCbuild8
spécialement fait pour vs2005… et bien non: il est incomplet - il manque le fichier ..\Modules\_typesmodule.c
dans pythoncore
(voir ici) et _socket
est absent!. Utilisez donc le projet vs2003 PCbuild
et compilez pythoncore
et _socket
..pro
de mtQt
) et compilez Metafor.wrap
) en .pyd
au lieu de .dll
sinon python ne les chargera pas.PYTHONPATH
contient le répertoire PCbuild
pour que Metafor debug trouve _socket_d.pyd
. .py
. J'y suis pas allé par 4 chemins: j'ai ajouté l'entête à tous les fichiers .py
. Voici la fameuse entête:# -*- coding: latin-1; -*-
et voici l'erreur en question:
SyntaxError: Non-ASCII character '\xe9' in file e:\dev\oo_meta\..\oo_nda\intelSig\tests\xfem\mooney4fast.py on line 135, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
MeshPointDetector
.ArcProjectionOperator
trouvé par Luc en compilant avec gcc 4 sur calimero (arrondis non gérés).pyd
(expl: wrap/_mtGlobal.pyd
à la place de wrap/_mtGlobal.dll
). C'est la norme et l'extension .dll
ne fonctionnera plus avec python 2.5!meta_config.h
:#if !defined(_CRT_SECURE_NO_DEPRECATE) #define _CRT_SECURE_NO_DEPRECATE #endif
— Romain BOMAN 2007/03/01 10:11