J'essaie de compiler/ OpenImageIO pour Windows 64 bits sur Fedora 26 à l'aide de MinGW. Après avoir utilisé yum
pour récupérer les versions multiples des dépendances, j'ai exécuté mingw64-cmake
suivi de make
. Cependant, je reçois tout de suite une erreur de compilation à propos du non-trouver stdlib.h
.
[ 0%] Built target CopyFiles
[ 0%] Building CXX object src/libutil/CMakeFiles/OpenImageIO_Util.dir/argparse.cpp.obj
In file included from .../oiio/src/libutil/argparse.cpp:36:0:
/usr/x86_64-w64-mingw32/sys-root/mingw/include/c++/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
^~~~~~~~~~
compilation terminated.
J'ai confirmé que stdlib.h
se trouve au moins dans /usr/include/
et dans /usr/x86_64-w64-mingw32/sys-root/mingw/include/c++/
où se trouve également le fichier donnant l'erreur de compilation.
Pourquoi est-ce que je reçois toujours l'erreur stdlib.h: No such file or directory
?
Mise à jour: J'ai effectué des recherches supplémentaires et appris ce qui suit: The preprocessor directive #include_next behaves like the #include directive, except that it specifically excludes the directory of the including file from the paths to be searched for the named file.
Cela expliquerait pourquoi cstdlib
ne trouve pas stdlib.h
dans le même dossier. Mais cstdlib
fait partie de MinGW et ne fait pas partie du code que je tente de compiler. Donc, je n'ai toujours aucune idée de ce qui ne va pas ici ou de la façon de corriger cette erreur.
Edit : Voici les informations sur la version du compilateur au cas où il serait utile: https://Pastebin.com/PZiXS2fg . Ceci est une nouvelle installation, donc il ne devrait y avoir rien d’inhabituel.
Je l'ai résolu, je peux compiler à nouveau.
La solution (pour moi) est d’ajouter au chemin la variable CPLUS_INCLUDE_PATH
et de la définir dans le répertoire d’inclusion MinGW c ++, pour moi: C:\MinGW\lib\gcc\mingw32\6.3.0\include\c++
.
J'espère que cela fonctionne pour vous aussi.
L'utilisation de #include_next
semble poser de nombreux problèmes en fonction de mon recherche sur Google. Essayez directement en incluant stdlib.h
en utilisant la syntaxe suivante:
-isystem /usr/x86_64-w64-ming32/sys-root/mingw/include/c++
Cette syntaxe a été ajoutée dans gcc
6.0 pour résoudre les problèmes liés aux bibliothèques tierces. Voir ici pour l'approche et le raisonnement.
Edit: Réponse modifiée pour refléter les nouvelles informations sur gcc wrapper_headers et #include_next