Ich bin auf einem komplexen Projekt in python2.7
gebaut, die für die Analyse des dynamischen Systems verwendet. PyDSTool
bietet zwei C-basierte Integratoren - Radau und Dopri - die ich verwenden möchte, um mein Gleichungssystem zu integrieren, dessen Quelle in einer Reihe von C/C++
Dateien kodiert ist.GCC mit -std = C++ 11 sieht keine C++ - Header-Dateien (über PyDSTool)
Ich habe nur wenig Kontrolle über das Paket, und als ich den Integrator instanziiert, kann ich nur hinzufügen Header *.H
Dateien, Quelldateien (*.C
, *.CPP
) und die Verzeichnisse passiert im Suchpfad des Compilers als auch enthalten als Bibliotheken zum verlinken.
Da ein konsistenter Teil des Codes auf C++11
basiert, übergebe ich dem Compiler auch das Argument -std=C++11
.
Schließlich /PyDSTool/Generators/mixins.py
Start ein setup
Befehl (Linie 185), die wiederum führt den Befehl build_ext
von distutils
zu dem alle oben Flags angehängt.
Aus Gründen der Klarheit: die Flaggen, die ich sind am anhängt:
compile options: '-I/usr/lib64/python2.7/site-packages/numpy/core/include -I/home/maurizio/Dropbox/StabilityAnalysis_tmp -I/usr/local/pydstool/PyDSTool/integrator -I/usr/include/python2_7 -I/usr/include/numpy -I/home/maurizio/Dropbox/Ongoing_Projects/pycustommodules -I/home/maurizio/Dropbox/Ongoing_Projects/c_libraries -I/home/maurizio/Dropbox/Ongoing_Projects/c_libraries/models -I/home/maurizio/Dropbox/Ongoing_Projects/DePitta_PNAS/Software/Stability_Analysis/ -I/usr/lib64/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c'
extra options: '-std=c++11 -w -Wno-return-type -Wall -lpython2.7 -lm -lgsl -lgslcblas -D__DOPRI__'
Die resultierende Zusammenstellung Befehl ausgegeben, wie durch PyDSTool
lautet:
error: Command "gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/lib64/python2.7/site-packages/numpy/core/include -I/home/maurizio/Dropbox/StabilityAnalysis_tmp -I/usr/local/pydstool/PyDSTool/integrator -I/usr/include/python2_7 -I/usr/include/numpy -I/home/maurizio/Dropbox/Ongoing_Projects/pycustommodules -I/home/maurizio/Dropbox/Ongoing_Projects/c_libraries -I/home/maurizio/Dropbox/Ongoing_Projects/c_libraries/models -I/home/maurizio/Dropbox/Ongoing_Projects/DePitta_PNAS/Software/Stability_Analysis/ -I/usr/lib64/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c /home/maurizio/Dropbox/StabilityAnalysis_tmp/dop853_temp/ei_network_vf.c -o /home/maurizio/Dropbox/StabilityAnalysis_tmp/dop853_temp/home/maurizio/Dropbox/StabilityAnalysis_tmp/dop853_temp/ei_network_vf.o -std=c++11 -w -Wno-return-type -Wall -lpython2.7 -lm -lgsl -lgslcblas -D__DOPRI__" failed with exit status 1
suchen Einmal in die build.log
Datei automatisch erzeugt durch PyDSTool
stellt sich heraus, dass der Exit-Status aufgrund der Tatsache, dass der Compiler nicht die C++
-Bibliotheken, die in mehreren Routinen/Bibliotheken von meinem Code, z
/usr/include/blitz/blitz.h:45:18: fatal error: string: No such file or directory
#include <string>
^
Compilation Terminated
Jetzt ist es kein Problem, mein Code ist, denn wenn ich meinen Code als eigenständige in Python kompilieren oder durch scipy.weave
mit derselben Kompilierung und zusätzliche Optionen oben eingefügt, es funktioniert. Es ist ein Problem, PyDSTool
den Code innerhalb des Integrators zu bauen. Da ich mit distutils
und allen gcc
Optionen NICHT praktisch bin, hoffe ich, dass hier ein Experte ist, der mir einen Einblick geben könnte. Ich vermute in der Tat, dass mir einige Optionen oder was auch immer fehlen, um den Compiler zu übergeben.
Die Quelldatei endet in '.c' und' gcc' ist normalerweise der C-Compiler-Aufruf, aber 'blitz.h' scheint ein C++ - only-Header zu sein. Was soll es sein? Wenn C++, sollte der Aufruf mit 'g ++' und der Endung '.cpp' erfolgen. Ob 'build_ext' C++ unterstützt, weiß ich nicht. – user4407569
@ Eichhörnchen Guter Punkt. Ich habe vergessen, dass 'PyDSTool'' .C' Dateien erzeugt. Tatsächlich scheint die Erweiterung etwas in den Code zu wechseln, obwohl sie sich immer noch nicht kompiliert. – maurizio