2016-09-21 1 views
0

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.

+0

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

+0

@ 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

Antwort

1

Nur der Vollständigkeit halber. Das Problem, auf das ich oben hingewiesen habe, hat keine einfache Problemumgehung. PyDSToolC -basierte Integratoren (d. H. Radau und Dopri) können nicht mit Quellcode für die Gleichungen in C++ sondern nur in C kompiliert werden. Also entweder Sie Ihren Code in C umwandeln oder versuchen, PyDSTool Integratoren zu bearbeiten und neu in C++. Die erste Option ist wahrscheinlich die einzig mögliche (zumindest für einige Nicht-Experten, die schreiben).

Verwandte Themen