Manière d’inclure les en-têtes du système C ++ lors de l’utilisation de g ++ – arm-linux-gnueabi?

J’essaie de comstackr une bibliothèque sur Ubuntu 14.04 avec les paquets gcc-arm-linux-gnueabi et g++-arm-linux-gnueabi installés.

La compilation échoue sur le premier fichier source rencontré:

 /usr/bin/arm-linux-gnueabi-g++ -DNDEBUG -g2 -Os -pipe -fPIC -I. -DCRYPTOPP_DISABLE_ASM -mcpu=cortex-m3 -mthumb --sysroot=/usr/arm-linux-gnueabi -c 3way.cpp In file included from cryptlib.h:83:0, from seckey.h:8, from 3way.h:7, from 3way.cpp:5: stdcpp.h:14:18: fatal error: memory: No such file or directory compilation terminated. 

Lorsque j’effectue une find je vois que les en-têtes C ++ sont situés à:

 $ find /usr -name memory /usr/arm-linux-gnueabi/include/c++/4.7.3/tr1/memory /usr/arm-linux-gnueabi/include/c++/4.7.3/memory /usr/arm-linux-gnueabi/include/c++/4.7.3/ext/memory ... 

/usr/arm-linux-gnueabi est déjà fourni en tant que SYSROOT :

 $ ls /usr/arm-linux-gnueabi bin include lib 

L’ajout d’un isysroot n’aide pas:

 /usr/bin/arm-linux-gnueabi-g++ -DNDEBUG -g2 -Os -pipe -fPIC -DCRYPTOPP_DISABLE_ASM -mcpu=cortex-m3 -mthumb -isysroot=/usr/arm-linux-gnueabi/include/c++/4.7.3 --sysroot=/usr/arm-linux-gnueabi -c 3way.cpp In file included from cryptlib.h:83:0, from seckey.h:8, from 3way.h:7, from 3way.cpp:5: stdcpp.h:14:18: fatal error: memory: No such file or directory 

J’ai compilé la bibliothèque sur d’autres plates-formes (comme Android, iOS et Windows Phone), alors j’ai une bonne idée de ce qu’il faut faire. Ceci est ma première fois avec arm-linux-gnueabi , cependant.

Quelle est la bonne façon d’inclure les en-têtes et les bibliothèques C ++ lors de l’utilisation du package g++-arm-linux-gnueabi ?

Related: un fichier de spec ne devrait-il pas déjà gérer cela?


EDIT : voici quelques informations connexes avec -v . Ces chemins intégrés sont malsains. Il semble que la chaîne d’outils essaie de former le chemin vers les en-têtes C ++, mais elle ne fait pas du bon travail:

 /usr/bin/arm-linux-gnueabi-g++ -v -DNDEBUG -g2 -Os -pipe -fPIC -DCRYPTOPP_DISABLE_ASM -mcpu=cortex-m3 -mthumb --sysroot=/usr/arm-linux-gnueabi -c 3way.cpp ... GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi/sf" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3/backward" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/local/include/arm-linux-gnueabi" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/include/arm-linux-gnueabi" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/include" #include "..." search starts here: #include  search starts here: /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include-fixed /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/include End of search list. GNU C++ (Ubuntu/Linaro 4.7.3-12ubuntu1) version 4.7.3 (arm-linux-gnueabi) ... 

Edit : ceci ressemble à un bogue dans les chemins internes utilisés par la chaîne d’outils. Dans les chemins intégrés, notez qu’il y a un /usr/arm-linux-gnueabi dans le chemin. La réponse ci-dessous fournit une solution de contournement.

Rapport de bogue déposé avec Ubuntu: g ++ – arm-linux-gnueabi ne peut pas comstackr un programme C ++ avec –sysroot .

 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi/sf" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/arm-linux-gnueabi/include/c++/4.7.3/backward" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/local/include/arm-linux-gnueabi" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/include/arm-linux-gnueabi" ignoring nonexistent directory "=/usr/arm-linux-gnueabi/include/c++/4.7.3/usr/include" #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include-fixed /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/include End of search list. GNU C++ (Ubuntu/Linaro 4.7.3-12ubuntu1) version 4.7.3 (arm-linux-gnueabi) ... 

Cela ressemble à un bogue dans les chemins internes utilisés par la chaîne d’outils. Dans les chemins intégrés, notez qu’il y a un /usr/arm-linux-gnueabi dans le chemin. Rapport de bogue déposé avec Ubuntu: g ++ – arm-linux-gnueabi ne peut pas comstackr un programme C ++ avec –sysroot .

Pour contourner le bogue, les chemins d’access aux en-têtes C ++ doivent être ajoutés explicitement avec -I :

  • /usr/arm-linux-gnueabi/include/c++/4.7.3
  • /usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi

Il n’est pas nécessaire de spécifier les bibliothèques C et C ++ lors de la liaison avec --sysroot car cette option les gère correctement.

Donc, une commande comstack / link ressemblerait à:

 /usr/bin/arm-linux-gnueabi-g++ ... -mcpu=cortex-m3 -mthumb \ -I/usr/arm-linux-gnueabi/include/c++/4.7.3 \ -I/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi \ --sysroot=/usr/arm-linux-gnueabi test.cpp -o test.exe