ski*_*ell 9 c++ python numpy shared-libraries python-3.x
我目前遇到一个问题,我可以numpy在解释器环境中使用和导入,但我无法导入或使用numpy嵌入的python C/C++.所以我很好奇如何numpy扩展库
numpy/core/multiarray.cpython-35m-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)
链接到标准的python包符号(PyExc_UserWarning具体为符号).我当前的错误输出说明了PyExc_UserWarning is undefined.libpythonX.Y.m.so当我使用nm命令确认时,此符号存在.我跑了
ldd multiarray.cpython-35m-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)
得到以下输出:
在我看来,这个库没有链接到应该包含该符号的任何动态库.怎样numpy的multiarray.cpython-35m-x86_64-linux-gnu.so通常会发现,符号或者多阵列的变化发现,象征?
感谢您抽出宝贵的时间阅读这个问题.任何想法,建议或答案都表示赞赏!
原来的问题就在这里.这是原始问题的一个子问题.我之所以提出这个问题是因为我怀疑这个共享库可能链接到了错误的位置,而这个特定的共享库只在通过python C/C++接口调用python时使用.
系统规格+问题信息
pip3.5 install numpy命令使用pip 9.0.0安装numpy-1.14.2修改了一些不清楚的术语.
我找到了原始问题的答案; 然而,这个问题和原始问题仍然是开放的,因为这个问题的答案可以为原始问题找到更好的答案.
multiarray.cpython-35m-x86_64-linux-gnu.so是在没有与 python 动态库显式链接的情况下构建的,这就是为什么您无法使用 ldd 看到 libpythonx.xx 的原因。
如果您使用 nm 来检查这一点,您将看到该符号PyExc_UserWarning未定义。
因此,当 numpy 使用 dlopen 加载它时,它会尝试解析这个未定义的符号。libdl.so我没有找到任何文档解释如何解析未定义符号的规则。但根据我的测试,当您尝试使用dlopenflag打开共享库时RTLD_NOW,它会在主程序的依赖共享库中搜索未定义的符号。
这可以解释为什么 python 可以毫无错误地使用它,因为 python 二进制文件与libpython.x.x.so.
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |