Utilizzare l'opzione -I/Users/myuser/anaconda/include/python2.7
nel comando gcc
. (Questo supponendo che si sta utilizzando Python 2.7 Cambiare il nome in modo che corrisponda alla versione di Python che si sta utilizzando.). È possibile utilizzare il comando python-config --cflags
per ottenere il set completo di bandiere di compilazione consigliati:
$ python-config --cflags
-I/Users/myuser/anaconda/include/python2.7 -I/Users/myuser/anaconda/include/python2.7 -fno-strict-aliasing -I/Users/myuser/anaconda/include -arch x86_64 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
Tuttavia, a Costruisci il modulo di estensione, ti consiglio di utilizzare uno script di installazione semplice, come il seguente setup.py
, e lasciare che distutils
trovi tutte le opzioni di compilazione e collegamento per te.
# setup.py
from distutils.core import setup, Extension
example_module = Extension('_example', sources=['example_wrap.c', 'example.c'])
setup(name='example', ext_modules=[example_module], py_modules=["example"])
Quindi è possibile eseguire:
$ swig -python example.i
$ python setup.py build_ext --inplace
(Date un'occhiata ai comandi del compilatore che vengono ripetuti terminale quando setup.py
viene eseguito.)
distutils
sa di SWIG, così invece di includere example_wrap.c
nell'elenco dei file di origine, è possibile includere example.i
e swig
verrà eseguito automaticamente dallo script di installazione:
# setup.py
from distutils.core import setup, Extension
example_module = Extension('_example', sources=['example.c', 'example.i'])
setup(name='example', ext_modules=[example_module], py_modules=["example"])
Con la versione sopra di setup.py
, si può costruire il modulo di estensione con il singolo comando
$ python setup.py build_ext --inplace
Una volta che hai costruito il modulo di estensione, si dovrebbe essere in grado di utilizzarlo in python:
>>> import example
>>> example.fact(5)
120
Se si preferisce non utilizzare lo script setup.py
, ecco una serie di comandi che hanno lavorato per me:
$ swig -python example.i
$ gcc -c -I/Users/myuser/anaconda/include/python2.7 example.c example_wrap.c
$ gcc -bundle -undefined dynamic_lookup -L/Users/myuser/anaconda/lib example.o example_wrap.o -o _example.so
Nota: sto usando Mac OS X 10.9.4:
$ gcc --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
Fantastico! Ha funzionato. Spiegazione molto chiara! Grazie – Fra
Grazie per aver condiviso i suggerimenti sull'uso di setup.py ~~ Funziona per me su mac osx 10.11 ~~ – zhkzyth