undefined symbol: PyFPE_jbuf 问题分析并处理

#PS:要转载请注明出处,本人版权所有

#PS:这个只是 《 我自己 》理解,如果和你的

#原则相冲突,请谅解,勿喷

前景提要

最近在某平台撸(学习)npu一个解决方案,既然要学习,就重头开始呗。首先我们就刷板子,没啥毛病,刷机正常。然后就开始配置环境,配置环境虽然有点小打小闹的问题,后面可能会记录过程吧,还是成功躺过,然后我就运行其自带的例子。然后得到以下毛病:
undefined symbol: PyFPE_jbuf 问题分析并处理_第1张图片

探索

因为我写过c/c++调用python的程序,所以我看到这个未定义的符号命名规则,我就知道,肯定是我TNND在编译python3.5的时候,少了点什么东西。下面查看系统python3的符号和我自己编译的python3的符号就证明了我的猜测:
在这里插入图片描述
在这里插入图片描述

既然这样我就去看看Python3.5的源码,还是发现了这个符号的踪迹:
在这里插入图片描述
哟西,直接排除fpectlmodule.c文件的,因为其是一个static,未export的变量。
看看pyfpe.h呢?
在这里插入图片描述
soga,那么几乎可以确定是这个WANT_SIGFPE_HANDLER没有启用。既然这个宏未启用那么一定有一个开关可以打开?
我们先来看看这个头文件的说明,可以得到的是这个模块是用来处理linux上的SIGFPE信号的。
undefined symbol: PyFPE_jbuf 问题分析并处理_第2张图片

简单说明:SIGFPE信号就是floating-point exception(浮点异常),比如除0试试,好玩!

我们继续看看帮助文档呢?
./configure --help看看呢?
undefined symbol: PyFPE_jbuf 问题分析并处理_第3张图片
找到了,发现了这个。应该是要添加这个选项,虽然我不知道为啥py要把这个选项独立出来。

解决方案

我看了网上的大部分方案都是说python版本过多的问题导致的。怎么说呢?原因确实可以这样说版本错误,因为你自己编译的版本和系统直接安装的版本编译参数是不一样的,所以有这个错。

#重新编译python即可
./configure --prefix=/usr/local/python3 --enable-shared --with-fpectl   
make -j16
sudo make install

undefined symbol: PyFPE_jbuf 问题分析并处理_第4张图片
出来啦,然后解决问题,完结散花。

#PS:请尊重原创,不喜勿喷

#PS:要转载请注明出处,本人版权所有.

有问题请留言,看到后我会第一时间回复

你可能感兴趣的:(嵌入式,C,&,C++,python)