Python 2.7 — GCC с -std = c ++ 11 не видит заголовочные файлы C ++ (через PyDSTool)

Я нахожусь на сложном проекте, построенном в python2.7 который использует PyDSTool пакет для анализа динамической системы. PyDSTool предоставляет два интегратора на основе C — Радау и Допри — которые я хочу использовать для интеграции моей системы уравнений, источник которой закодирован в кучу C/C++ файлы.

У меня мало контроля над пакетом, и когда я создаю экземпляр интегратора, я могу добавлять только заголовки *.H файлы, исходные файлы (*.C, *.CPP) и передать каталоги для включения в путь поиска компилятора, а также библиотеки для ссылки.

Поскольку последовательная часть кода основана на C++11 Я передаю компилятору также аргумент -std=C++11,

В конце концов, /PyDSTool/Generators/mixins.py запустить setup команда (строка 185), которая в свою очередь запускает команду build_ext от distutils к которому добавлены все вышеперечисленные флаги.

Для ясности: флаги, которые я добавляю:

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__'

Результирующая команда компиляции, выданная PyDSTool гласит:

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

Однажды глядя в build.log файл автоматически генерируется PyDSToolполучается, что состояние выхода связано с тем, что компилятор не видит C++ библиотеки, которые находятся в нескольких подпрограммах / библиотеках, используемых моим кодом, например

/usr/include/blitz/blitz.h:45:18: fatal error: string: No such file or directory
#include <string>
^
Compilation Terminated

Теперь, это не проблема моего кода, потому что, если я скомпилирую свой код как автономный в Python или через scipy.weave с той же компиляцией и дополнительными опциями, вставленными выше, это работает. Это проблема создания PyDSTool построить код внутри интегратора. Поскольку я НЕ практичен с distutils и все gcc варианты Я надеюсь, что здесь есть какой-то эксперт, который мог бы дать мне некоторое представление. На самом деле я подозреваю, что мне не хватает некоторых опций или чего-либо еще, чтобы передать компилятору.

0

Решение

Просто ради полноты. Проблема, которую я указал выше, не имеет простого решения. PyDSTool CИнтеграторы на основе (то есть Радау и Допри) не могут быть скомпилированы с исходным кодом для уравнений в C++ но только в C, Так что либо вы переделываете свой код в простой C или попробуйте отредактировать PyDSTool интеграторы и переделать их в C++, Первый вариант, вероятно, единственный в настоящее время возможный (по крайней мере, для некоторых не экспертов, как пишут).

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector