Bonjour,
J’effectue beaucoup de calcul numérique scientifique. Je travail actuellement sous Matlab qui devient trop lent pour mes programmes. C’est pourquoi j’aimerai bien me mettre au C++ qui devrait être beaucoup, beaucoup plus rapide.
J’ai lu pas mal de cours de c++ sur internet. Ce langage est très bien documenté. Cependant, dans cette méthode d’apprentissage il manque un prof capable de répondre aux questions que je me pose. C’est pourquoi j’ai choisis de poser quelques questions ici. Je sais que les réponses sont certainement dans les différents articles que j’ai pu lire mais ce n’est pas toujours très claire pour moi et je voudrais être sûr d’avoir bien compris.
J’ai pas mal de questions (surtout relatives aux bibliothèques). Je vais donc essayer d’organiser mon post le mieux possible. Petite précisions, j’aimerai déjà, pour bien comprendre comment fonctionne le C++ travailler avec un simple éditeur de texte et un compilateur en ligne de commande (je suis sous linux).
J’aimerai, dans la mesure du possible, ne travailler qu’avec des fichiers sources (y compris les bibliothèques) et tout recompiler à chaque fois, ceci pour deux raisons :
_je veux stocker tout mes fichiers sources de bibliothèque dans un dossier bien déterminé .Je ne souhaite pas qu’il me génère des fichiers compilés de bibliothèques et qu’il me les stock je ne sais où. De plus, je souhaite connaitre précisément quel fichier il utilise lors de la compilation.
_je souhaite pouvoir exécuter le code sur d’autres machine. En effet, je souhaite coder sur mon pc portable et faire quelques test pour verifier le bon fonctionnement du programme. J’aimerai ensuite prendre tout mes fichiers sources et les recompiler sur la machine qui effectuera réellement les calculs (qui est d’une architecture différente).
Question 0 : Est-ce possible ? Je pense que oui, mais pas avec toutes les bibliothèques.
I/ Création d’une bibliothèque personnelle
Si j’ai bien compris, j’ai besoin :
_de fichiers .cpp contenant mes fonctions
_d’un fichier .h contenant les prototypes des fonctions + autre chose (je n’ai pas compris ce que c’est).
Question I.1 : Si je met ces deux fichiers dans un répertoire contenant les librairies et que j’indique au compilateur le chemin pour trouver les bibliothèques cela fonctionnera t’il ? Bien entendu, je met le « #include » qui va bien dans mon programme principal.
Question I.2 : Comment créer le fichier .h ? A la main, j’imagine que c’est possible. Ce n’est pas bien compliqué de définir les prototypes des fonctions mais il y a autre chose dans le .h que je n’ai pas très bien compris. Peut-on demander au compilateur de le générer ?
Question I.3 : Doit-il y avoir un lien entre le nom du fichier .cpp et le nom de la fonction qu’il contient ? Puis-je mettre plusieurs fonction dans un même fichier .cpp ?
II/ Utilisation d’une bibliothèque extérieur codée en C++
Si je souhaite utiliser une bibliothèque (par exemple de calcul matriciel) codée en C++ puis-je:
Question II.1 : trouver facilement le code source (i.e. les .cpp contenant les fonctions et le ou les fichiers .h) ?
Question II.2 : Enregistrer simplement ces fichiers comme proposé à la question I.1 et les utiliser tel quel?
III/ Utilisation d’une bibliothèque extérieur non codée en C++
Bon, là ça se complique. J’imagine qu’il faut que cette bibliothèque soit compilée ou que je la compile moi-même car le compilateur c++ en sera incapable.
Question III.1 : Une fois que cette compilation est terminée, de quels types de fichier ai-je besoin pour l’utiliser ?
Question III.2 : Puis-je (ou dois-je) utiliser un fichier .h et des fichiers .cpp qui permettent de faire appel à cette nouvelle bibliothèque ? Est-ce ceci le « binding »?
IV/ Appelle d’un programme installé sur l’ordinateur depuis un code C++
Question IV : Est-il possible d’appeler un programme installé sur l’ordinateur (je pense notamment à GNUplot) depuis un code c++? Je pense que c’est possible en envoyant une commande système. Mais est-il possible de le faire en appelant des fonctions d’une bibliothèque c++ ? C’est peut-être plus cela le « binding » ?
Ces question on pour principal but de m’aider a rester propre dans la gestion de mes fichiers, et de savoir précisément lesquels utilise le compilateur.
Une petite dernière question : Quelle bibliothèque de tracés de graphiques me conseilleriez vous ? J’aimerai par exemple pouvoir tracer une courbe toutes les ‘n’ itérations pour surveiller la convergence d’un algorithme.
Désolé pour ce long post. Il a néanmoins le mérite d’être claire (enfin j’espère).
Merci par avance !
-----