2010-07-08 8 views
0

J'essaie de générer un wrapper python pour une bibliothèque C++ que je suis en train de mettre en place. Je viens de rencontrer SWIG et j'essaie d'utiliser cela en conjonction avec distutils. Je suis en train de modifier le code de quelqu'un d'autre, donc des erreurs bizarres étaient à prévoir mais celle-ci est juste déroutante. J'ai réussi à générer un fichier wrapper C++ avec SWIG et j'essaye maintenant d'exécuter une version modifiée de setup.py afin d'installer le wrapper (qui peut ou peut ne pas fonctionner, mais je vais traverser ça pont quand il s'agit de lui.) Lorsque vous faites cela, des erreurs de compilation apparaissent sur l'incapacité d'inclure des fichiers d'en-tête. Spécifiquement - chaîne, ostream, sstream, carte et vecteur. Toutes sont des bibliothèques standard, incluses comme "include".GCC ne reconnaît pas les fichiers d'en-tête standard lors de l'utilisation de swig et distutils

Le code lui-même compile, mais en essayant de créer un wrapper de cette façon, il ne le fait pas.

Je ne suis pas tout à fait sûr de ce que l'information est pertinente pour cela, mais c'est ainsi que l'extension est faite:

## Extension definition 
import os 
wrapsrc = './project_rewrite_wrap.c' 
incdir_src = os.path.abspath('../include/project') 
incdir_build = os.path.abspath('../include/project') 
libdir = os.path.abspath('../lib') 
ext = Extension('_project_rewrite', 
       [wrapsrc], 
       include_dirs=[incdir_src, incdir_build], 
       library_dirs=[libdir, os.path.join(libdir,'.libs')], 
       libraries=['ProjectMain']) 

La commande gcc qui est exécuté est:

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/home/ben/Project/rewrite/include/Project -I/home/ben/Project/rewrite/include/Project -I/usr/include/python2.6 -c ./project_rewrite_wrap.c -o build/temp.linux-i686-2.6/./project_rewrite_wrap.o

qui se traduit par erreurs telles que:

./project_rewrite_wrap.c:2696:18: error: string: No such file or directory

Toutes les pensées seraient grandement appréciées, merci.

Répondre

2

Vous compilez du code C - les en-têtes dont vous parlez font partie de C++, pas C. Pour compiler en code C++, utilisez le pilote g ++ au lieu de gcc et donnez aux fichiers sources une extension .cpp au lieu de .c.

Questions connexes