【问题标题】:Import errors with boost_pythonboost_python 的导入错误
【发布时间】:2017-02-27 16:10:23
【问题描述】:

当我尝试加载 boost::python 构建模块时,我在 Cygwin 上遇到了这些错误:

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

我构建的其他模块(C 或 C++)没有此类错误。

这是我的最小模块:

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

我是这样构建的:

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

所有涉及的 .dll 都具有读取和执行权限。

我只使用 cygwin 安装的软件,没有使用二进制或源代码包。 GCC 版本是 6.3.0,Boost 是 1.60。

完全相同的配置在 Linux 上运行,并且它曾经在 Cygwin 上运行。

当我通过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

(那是strace.exe本身崩溃了)

当我用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)

如何开始对其进行故障排除?

使用调试信息从源代码构建 Python 和/或 Boost 将是我最后的选择。

【问题讨论】:

  • 尝试打开 Dependency Walker (dependencywalker.com) 上的 dll 并检查是否缺少资源。
  • @HugoCorrá depwalker 显示所有递归依赖的 dll 中没有丢失资源。

标签: python boost cygwin boost-python


【解决方案1】:

这似乎是 GCC 6.3.0 错误的结果。

最小复制:

#include <typeinfo>

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

这个程序在 cygwin 下的 gcc 6.3.0 下会出现段错误(无论如何在我的机器上)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2016-02-10
    相关资源
    最近更新 更多