La compilation de 32 bits matlab application sur un ordinateur 64 bits (c++)
Je suis actuellement à la construction d'un 32-bit MatLab-moteur d'application en c++ sur un ordinateur 64 bits, 64 bits installé MatLab. Cependant, j'ai toutes les dll et les fichiers de bibliothèque en 32 bits pour l'MatLab moteur. Les fichiers de bibliothèque et dll chargé correctement (je peux compiler et lancer l'application sans aucune erreurs, je voudrais obtenir lorsque j'utilise la version 64 bits dll/libs), mais la dll 32 bits est apparemment lancement de la version 64 bits de matlab exécutable, donc, mon programme se bloque dès que j'essaie de faire quelque chose avec le moteur. Est il possible que je peux faire ma demande de lancement de la version 32 bits de matlab exécutable au lieu de la version 32-bit?
Merci d'avance!
OriginalL'auteur Tiddo | 2011-12-12
Vous devez vous connecter pour publier un commentaire.
C'est possible, mais c'est extrêmement pénible: l'ensemble de la mbuild/deploytool système est un morceau de cr*p, à mon avis. Premier problème avec deploytool.chauve-souris, c'est que, bien qu'ayant une '-win32 " option, qui n'a aucun effet lorsque deploytool n'est pas invoqué à partir du répertoire d'installation 32 bits. Le deuxième problème est que la mbuild options sont communes pour les versions 32 et 64 bits de sorte qu'ils doivent être spécifiés manuellement comme ailleurs les options du compilateur sont utilisés.
Voici quelques choses que j'ai fait pour compiler à la fois 32 bits et 64 bits de 64 bits windows de la machine avec VS2010 installé.
<param.c.cpp.options.file>
à la prj en vertu de la "configuration" de la section (voir ci-dessous)options de fichier de config dans prj:
Noter que la sortie dir etc sera le même pour les versions 32bits et 64bits. Dans la pratique, si vous avez à faire cela pour de multiples projets, cela devient totalement unmanagable. J'ai donc un script msbuild pour rendre la vie plus facile: en gros, dans le chemin du fichier que j'ai remplacer tout dépendants de la plateforme (sortie dir, matlab root dir, les options de l'emplacement du fichier) par des macros, puis laissez msbuild copier le chemin et de faire une regex rechercher/remplacer des macros avec des valeurs en fonction de la plateforme. Ceci permet d'utiliser le même prj pour les deux plates-formes.
Mise à jour
Après quelques changements majeurs dans nos projets, nous avons constaté que, finalement, les tracas de traiter avec le matlab prj fichiers n'était pas la peine. Au lieu de cela, nous avons grandement simplifié tout en invoquant
mcc
directement et de le nourrir avec tous les fichiers appartenant à un projet. Voici la msbuild code; certains vérification des erreurs ignorées pour plus de clarté:Il a besoin de ces propriétés:
Je viens de lire votre réponse un peu mieux, mais je ne comprends toujours pas pourquoi mon programme ne fonctionne pas: je n'utilise pas buildtools de matlab, je viens d'inclure un lien vers le lib et de dll, donc mon programme peut utiliser le moteur. Aussi loin que je peux comprendre, le deploytool est simplement un outil qui compile un programme avec les paramètres corrects pour le MEX fichiers. Cependant, je n'ai pas de construire un fichier MEX, et je configurer manuellement les paramètres dont j'ai besoin. Mais que cela doit être possible, d'une certaine façon pour définir les paramètres d'une telle manière que je PEUX exporter en 32 bits sans avoir à installer une version 32 bits de droite?
quelles libs utilisez-vous? Dans mon 64 bits installation, il y a seulement 64 bits libs sous extern/lib/win64 ils ne peuvent donc éventuellement être utilisé pour construire une version 32 bits
Non, mais à mon université et nous avons des ordinateurs avec une installation 32 bits (c'est pourquoi il a besoin de construire pour 32 bits) , j'ai donc copié à partir de là. Sans ces libs le programme ne compile pas. Et avec la version 64 bits DLL de compiler, mais le programme ne pourra pas démarrer le moteur. Avec la dll 32 bits et lib est il wil début, mais comme je l'ai dit dans mon premier post, il échouera dès que je fais quelque chose avec elle.
dans ce cas: êtes-vous sûr que tous dll le moteur d'exécution utilise sont dans votre chemin? pas seulement mclmcrt, mais en vertu de la bin/win32 répertoire il y a plus de 50 ans dll, et tous sont différents pour la version 32 bits, et presque tous d'entre eux sont utilisés par le moteur d'exécution
OriginalL'auteur stijn