Je souhaite m'initier à OpenGl mais mon soucis est que lorsque je veux inclure dans mon code (en C++) l'entête <SDL2/SDL.h> cela me retourne l'erreur suivante : SDL2/SDL.h no such file or directory
J'ai vérifier, le header est bien dans /usr/include/SDL2
Et je compile avec cette ligne : g++ program.cpp -o prog -I/usr/include/SDL2 `pkg-config --cflags --libs sdl2`
Mais rien ne fonctionne, même après avoir chercher plusieurs heures, ce pourquoi je m'en remet à vous.
Si tu ajoutes le dossier /usr/include/SDL2, le fichier est accessible avec SDL.h, pas SDL2/SDL.h. Mais il n'y a pas de raison de faire un ajout explicite des includes systèmes, car l'option implicitement ajoutée est : -isystem /usr/include.
Que donne g++ -xc++ -v -E program.cpp ? La commande va afficher les dossiers de recherche pour les includes.
Donc ça dépend. Chez moi ça marche (tm) avec les deux ("", <>) pour SDL2/SDL.h, le fichier étant dans /usr/include/SDL2/SDL.h
Une des différences notables habituelles, est que si on met des guillemets, la recherche d'un fichier d'entete est tentée d'abord dans le répertoire courant, puis dans ceux qui sont indiqués par les options genre -I.
Alors que les chevrons, c'est dans les répertoires "système", quoi que ce mot puisse vouloir dire, ce qui inclue _en particulier_ les entêtes standard de la bibliothèque C (7.1.2).
3.15 Options for Directory Search
These options specify directories to search for header files, for libraries and for parts of the compiler:
-I dir
-iquote dir
-isystem dir
-idirafter dir
Add the directory dir to the list of directories to be searched for header files during preprocessing. If dir begins with ‘=’ or $SYSROOT, then the ‘=’ or $SYSROOT is replaced by the sysroot prefix; see --sysroot and -isysroot.
Directories specified with -iquote apply only to the quote form of the directive, #include "file". Directories specified with -I, -isystem, or -idirafter apply to lookup for both the #include "file" and #include <file> directives.
You can specify any number or combination of these options on the command line to search for header files in several directories. The lookup order is as follows:
For the quote form of the include directive, the directory of the current file is searched first.
For the quote form of the include directive, the directories specified by -iquote options are searched in left-to-right order, as they appear on the command line.
Directories specified with -I options are scanned in left-to-right order.
Directories specified with -isystem options are scanned in left-to-right order.
Standard system directories are scanned.
Directories specified with -idirafter options are scanned in left-to-right order.
You can use -I to override a system header file, substituting your own version, since these directories are searched before the standard system header file directories. However, you should not use this option to add directories that contain vendor-supplied system header files; use -isystem for that.
The -isystem and -idirafter options also mark the directory as a system directory, so that it gets the same special treatment that is applied to the standard system directories.
If a standard system include directory, or a directory specified with -isystem, is also specified with -I, the -I option is ignored. The directory is still searched but as a system directory at its normal position in the system include chain. This is to ensure that GCC’s procedure to fix buggy system headers and the ordering for the #include_next directive are not inadvertently changed. If you really need to change the search order for system directories, use the -nostdinc and/or -isystem options.
Pour C++17 c'est du même genre: <> -> dépend de l'implémentation ; "" -> dépend de l'implémentation, mais si rien n'est trouvé, il faut le refaire comme ci c'était un <>.
Il y a quand même une petite note indiquant que le programmeur devrait utiliser <> pour les en-têtes fournis avec l’implémentation et "" pour les autres. Je suppose qu'il faut comprendre avec l'implémentation du compilateur.
Pendant un temps (à mes débuts avec le c++ et la SDL2) , j' utilisais les chevrons pour les includes de la SDL2. J'ai changé mon fusil d'épaule en lisant un post de Markand.
La convention définie par SDL c'est SDL.h sans préfixe de répertoire. Et c'est ce que sdl2-config et le pkgconfig te fourniras en chemin d'include pour pouvoir include SDL.h directement.
git is great because Linus did it, mercurial is better because he didn't.
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
git is great because Linus did it, mercurial is better because he didn't.