使用f2py启用运行时数组边界检查和符号

2024-06-16 13:34:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用f2py和intelfortran+visualstudio编译成Python扩展的Fortran代码。该代码有一个完整的测试套件和五年的历史。然而,最近我一直在新机器上使用它,而且它的扩展使Python崩溃了。崩溃是否会发生取决于Python中的import order和print语句,因此我怀疑是某种内存或堆栈问题。在

如果我只是在编译语言中工作,那么如果我使用完全优化编译,但是构建符号,并且启用运行时数组边界检查,那么通常会获得足够信息量的跟踪。在

这个组合在f2py中可能吗?我该怎么做?在

我的目录结构如下所示:

.
+-- setup.py
+-- lib
|   + hcclib.lib
|   + hcc.pyf
|   + hcc.for
+-- pyhcc
|   + __init__.py
|   + pyhcc.py 

还有我的设置.py看起来像这样:

^{pr2}$

接口由pyhcc.py,它执行参数检查并调用\u hcc中的扩展函数。在

当我编译扩展时,fortran会调用fortran编译器(ifort),而c++则会调用c++编译器(cl)。我添加了ExtryCorpILIGARG(如彼埃尔建议的),但是发现我需要把所给的标志传递给C++和FORTRAN,所以使用ExtryCopielyARG来处理C和ExtFuxF77编译CARILIGARG或Exforf9090CorpILIGARGARS FORTRAN(它被处理。基于构建的f2py部分的消息,这些标志似乎被使用了。在

当崩溃发生时,命令行上没有消息。我收到一个消息框,其中提供在visualstudio中进行调试,但是当我说是时,调试器说没有符号。我不知道这是不是真的。有没有方法可以验证符号是否存在于静态库中肝细胞癌.lib或者输出pyd文件?否则我该怎么做?坠机本身似乎是一个错误。我可以捕捉它并用python中的faulthandler标识例程,但这还不够缩小范围。在


Tags: 代码py消息编译器标志lib符号编译成