undefined symbol: PyFPE_jbuf 问题分析并处理


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

PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。

环境说明

  无

前景提要


  最近在某平台撸(学习)npu一个解决方案,既然要学习,就重头开始呗。首先我们就刷板子,没啥毛病,刷机正常。然后就开始配置环境,配置环境虽然有点小打小闹的问题,后面可能会记录过程吧,还是成功躺过,然后我就

  运行其自带的例子。然后得到以下毛病:

rep_img




探索


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

rep_img
rep_img

  既然这样我就去看看Python3.5的源码,还是发现了这个符号的踪迹:

rep_img

  哟西,直接排除fpectlmodule.c文件的,因为其是一个static,未export的变量。看看pyfpe.h呢?

rep_img

  soga,那么几乎可以确定是这个WANT_SIGFPE_HANDLER没有启用。既然这个宏未启用那么一定有一个开关可以打开?

  我们先来看看这个头文件的说明,可以得到的是这个模块是用来处理linux上的SIGFPE信号的。

rep_img

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

  我们继续看看帮助文档呢?

  ./configure --help看看呢?

rep_img

  找到了,发现了这个。应该是要添加这个选项,虽然我不知道为啥py要把这个选项独立出来。





解决方案


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

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

  出来啦,然后解决问题,完结散花。





后记


  无

参考文献




打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)
qrc_img

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

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

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


文章作者: Sky
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Sky !
  目录