web-dev-qa-db-fra.com

Atollic TrueSTUDIO: Comment convertir en c C++?

J'essaie de convertir mon projet en C++ dans TrueSTUDIO for STM32 en

  • Sélection d'un projet (dans l'onglet Projets C/C++)
  • Bouton droit de la souris, sélectionnez Nouveau/Autre
  • Dans l'onglet C/C++, convertir en projet C/C++ (ajoute la nature C/C++)
  • En appuyant sur Suivant, rien ne se passe (on ne sait pas pourquoi)
  • Lorsque j'appuie à nouveau sur Suivant, je vois: Conversion en projet C/C++: les assistants ajoutent C/C++ Nature aux projets sélectionnés pour activer les outils C/C++ pour leur prise en charge.
  • Je presse Terminer

Que rien ne se passe, quand je change de main.c en main.cpp, j'obtiens l'erreur suivante après la construction:

startup\startup_stm32f407xx.o: In function `LoopFillZerobss':
C:\Users\Michel\OneDrive\Stm32\Stm32CubeProjects\Fcb1010\Debug/..\startup/startup_stm32f407xx.s:115: undefined reference to `main'
collect2.exe: error: ld returned 1 exit status

Il semble que C est toujours utilisé (également dans la ligne de commande (première partie):

arm-atollic-eabi-gcc -o Fcb1010.elf Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.o Drivers\STM ...

Je m'attendrais à ce que g ++ soit utilisé.

Comment modifier mes paramètres/procédures pour pouvoir utiliser C++ dans TrueSTUDIO pour un projet généré par CubeMX?

METTRE À JOUR

J'ai supprimé Atollic TrueStudio, AC6 System Workbench et réinstallé AC6 System Workbench. Maintenant, je peux utiliser C++ à AC6 System Workbench, même en utilisant STL.

Je n'ose plus installer Atollic TrueStudio, car il rompt l'installation existante de AC6 SystemWorkbench, probablement parce qu'ils utilisent tous les deux Eclipse. Dommage, car certaines fonctionnalités de TrueStudio me plaisaient, mais C++ est plus important pour moi. Donc pour moi, plus de TrueStudio.

10
Michel Keijzers

L'erreur que vous mentionnez 

startup\startup_stm32f407xx.o: Dans la fonction 'LoopFillZerobss': C:\Utilisateurs\Michel\OneDrive\Stm32\Stm32CubeProjects\Fcb1010\Debug/..\startup/startup_stm32f407xx.s: 115: référence non définie à `main '. collect2.exe: erreur: ld a renvoyé 1 état de sortie

C’est un problème d’éditeur de liens, je suppose que la bibliothèque recherche une fonction principale c. Un compilateur C++ manipule les noms, ainsi le symbole ne sera plus main.

Essayez de changer la signature de votre main en extern "C" int main(void)

3
Colin

Veuillez suivre les étapes ci-dessous: -

  1. Mieux convertir tous les fichiers .c en .cpp manuellement
  2. Vérifiez chaque fichier d'en-tête et modifiez la macro spécifique au langage C
  3. changez la fonction principale de type C en C++ (void main en int main ()) renvoie également une valeur de votre fonction principale.
  4. Si vous utilisez un fichier make, vérifiez si des dépendances C spécifiques sont référées et modifiez-les.

J'espère que cela aidera.

1