简体   繁体   English

使用boost_python导入错误

[英]Import errors with boost_python

I'm getting these errors on Cygwin when I try to load a boost::python built module: 当我尝试加载boost :: python构建的模块时,在Cygwin上出现这些错误:

>>> import Whatever
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: Permission denied

I don't have such errors for other modules I build (C or C++). 对于我构建的其他模块(C或C ++),我没有此类错误。

Here's my minimal module: 这是我的最小模块:

#include <boost/python.hpp>
void whatever(){}
BOOST_PYTHON_MODULE(Whatever)
{
    using namespace boost::python;
    def("whatever", whatever);
}

and I build it this way: 我以这种方式构建它:

g++ -shared -o Whatever.dll Whatever.cpp -I/usr/include/python2.7 \
       -lboost_python -lpython2.7

All .dlls involved have read and execute permissions. 所有涉及的.dll都具有读取和执行权限。

I'm using only software installed by cygwin, nothing from binary or source packages. 我只使用cygwin安装的软件,而没有二进制或源程序包中的任何软件。 GCC version is 6.3.0 and Boost is 1.60. GCC版本是6.3.0,Boost是1.60。

Exactly the same configuration is working on Linux, and it used to work on Cygwin some time ago. 完全相同的配置在Linux上也可以使用,而以前在Cygwin上也可以使用。

When I run Python through strace (on Cygwin), I get this: 当我通过strace (在Cygwin上)运行Python时,得到以下信息:

<tons of output>
--- Process 35608 loaded C:\cygwin64\bin\cygboost_python-1_60.dll at 00000003f7ec0000
--- Process 35608 loaded C:\cygwin64\bin\cyggcc_s-seh-1.dll at 00000005e1570000
--- Process 35608 loaded C:\cygwin64\bin\cygstdc6.dll at 00000005d4da0000
--- Process 35608, exception c0000005 at 00000003f7ee8527
--- Process 35608 thread 48604 exited with status 0xc0000005
--- Process 35608 thread 13756 exited with status 0xc0000005
--- Process 35608 thread 45304 exited with status 0xc0000005
--- Process 35608 exited with status 0xc0000005
Segmentation fault

(that's the strace.exe itself crashing) (这就是strace.exe本身崩溃)

When I run it with gdb , I get this: 当我使用gdb运行它时,我得到了:

Thread 1 "python2.7" received signal SIGSEGV, Segmentation fault.
0x00000003f7ee8527 in cygboost_python-1_60!_ZTv0_n40_N5boost16exception_detail10clone_implINS0_19error_info_injectorINS_17bad_function_callEEEED1Ev ()
   from /usr/bin/cygboost_python-1_60.dll
(gdb)

How can I start troubleshooting it? 如何开始对它进行故障排除?

Building Python and/or Boost from source with debug information would be my last resort. 我将不愿采用调试信息从源代码构建Python和/或Boost。

This appears to be consequence of a GCC 6.3.0 bug. 这似乎是由于GCC 6.3.0错误引起的。

A minimal reproduction: 最小复制:

#include <typeinfo>

int main()
{
    typeid(int).name();
}

This program segfaults under gcc 6.3.0 under cygwin (on my machine at any rate). cygwin下的gcc 6.3.0下的该程序segfaults(无论如何在我的机器上)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM