Question

Il semble que plusieurs façons d'appeler Matlab en C ++ et C pour appeler C C ++ Matlab. Alors que je tente de les énumérer ici, s'il vous plaît pointer si je manque quelque chose.

Pour appeler C C ++ dans Matlab, il y a aussi deux méthodes. Le premier est d'appeler des fonctions dans les bibliothèques C partagées. Le second est de construire le code C C en binaire MEX-fichiers, qui seront appelés à partir de la ligne de commande Matlab. Pour la première méthode, sont les bibliothèques partagées C ne sont que les généraux, à savoir sans changement à leur code C pour Matlab et compilées à partir compilateur général C comme gcc?

Pour appeler le code Matlab en C ++ C, il existe deux méthodes disponibles. Le premier est le moteur Matlab. La seconde est d'utiliser MATLAB Compiler mcc pour créer des bibliothèques C ou C ++ partagé à partir de votre code Matlab.

Outre MATLAB et C C ++ peut communiquer par l'intermédiaire d'écriture et de lecture de données vers et depuis un certain fichier (par exemple le fichier de tapis, fichier texte).

Avoir plus d'une façons d'atteindre chacun des buts ici, pourriez-vous me dire quels cas sont les meilleurs pour l'utilisation qui d'entre eux? dire d'appeler des fonctions dans les bibliothèques C partagées VS bâtiment C C ++ code dans les fichiers binaires MEX-moteur Matlab VS la compilation du code Matlab en C C ++ bibliothèque partagée.

Merci et salutations!

Était-ce utile?

La solution

Je ne expreience d'appeler C ou C ++ fonctions de Matlab. Il me semble que la seule différence entre l'appel de fonctions dans une bibliothèque partagée et d'appeler des fonctions à partir d'un fichier MEX est que, avec une bibliothèque partagée, vous devez appeler la fonction avec « calllib » qui est une fonction de type de ligne de commande et les fonctions MEX permettent vous d'appeler des fonctions comme si elles sont des fonctions intégrées de sorte que l'interface est un peu plus propre.

Ma suggestion est d'utiliser des fichiers MEX si

  • Vous utilisez C ++ (vous pouvez avoir à écrire un wrapper pour utiliser un C ++ dans une bibliothèque partagée)
  • Vous utilisez Matlab comme la colle pour un grand nombre de routines optimisé C ou C ++. Vous voulez être en mesure de les appeler proprement.

Utiliser la bibliothèque partagée si

  • Vous avez déjà une bibliothèque C existante qui peut être utilisé sans modification.
  • Vous avez seulement besoin d'un petit nombre d'appels à des fonctions C.

Vraiment, il se résume à l'interface. Personnellement, je préfère la route fichier MEX car il fournit l'interface propre entre Matlab et votre C ou C ++ fonction. Vous pouvez l'appeler comme juste une autre fonction avec les types standards Matlab. Avec une bibliothèque partagée, vous devrez peut-être faire une mise en forme de données avant d'appeler la fonction de bibliothèque

Autres conseils

Je pense que les méthodes que vous avez nommés sont corrects (il a été un moment que je les ai utilisés)

Le Matlab compilateur C est pas vraiment spécial; il est possible d'utiliser différents compilateurs. Voir lien liste des compilateurs pris en charge. Cela ne comprend pas gcc, mais MS Visual Studio est inclus. Vous rencontrez des problèmes lors de la liaison avec les bibliothèques fournies.

En gros: appeler Matlab de C est quelque chose que vous feriez si vous avez besoin d'une interface étanche; par exemple si vous souhaitez synchroniser 2 outils ou votre S-fonction (Simulink) nécessite des informations supplémentaires. Mais alors, un tel fichier est appelé par propably Matlab / Simulink en premier lieu.

Appel c de Matlab est ce que vous voulez faire si vous écrivez vos propres S-fonctions ou extensions à Matlab.

Le choix entre C et C ++ est le vôtre; si vous commencez à partir d'une feuille blanche, je vous suggère d'utiliser C ++; vous n'avez pas besoin d'utiliser toutes les fonctionnalités, mais il permet une plus grande liberté. En outre plus de bibliothèques ont tendance à être disponibles pour C ++ de nos jours.

C est la langue de choix si vous avez besoin de migrer vers des environnements très différents; à savoir pour compiler C à DSP par exemple. Ou si vous avez le code existant en C pour commencer. Le mélange C et C ++ est possible, mais peut être un peu lourd; Je suis sûr que vous trouverez les sujets StackOverflow sur ce seul sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top