gpt4 book ai didi

python - IPython 支持 ctypes 吗?

转载 作者:行者123 更新时间:2023-12-03 17:09:05 26 4
gpt4 key购买 nike

我正在尝试在 IPython 中执行 C 代码(使用 ctypes),但是每次调用 C 函数时 IPython 都会崩溃。
环境

  • Windows 10(64 位)
  • Python 3.8.5 64 位
  • GCC 9.1.0 (tdm-gcc)

  • 最小工作示例
    文件 test.c :
    int func(){
    return 10;
    }
    命令行编译:
    gcc -shared -o test.dll -fPIC test.c
    在同一目录中启动 IPython,然后运行:
    In [1]: import ctypes
    ...: lib = ctypes.CDLL("test.dll")
    ...: lib.func()
    Out[1]: 10
    输出 Out[1]是正确的,但是 IPython 在 Out[1]: 10 之后立即崩溃被打印。 (有时它会在打印 Out[1]: 10 之前崩溃)
    问题
    IPython 支持 ctypes 吗?
    如果是这样,为什么会出现上述问题?
    如果不是这样,是否有在 IPython/Jupyter Notebook 中使用 ctypes 的解决方法?
    更新
  • 在 WSL 上尝试了相同的代码(在同一台机器上); IPython 没有崩溃。
  • 尝试了 Tim Roberts 的解决方案(将 CDLL 更改为 WinDLL ;见评论);不工作。

  • 更新:问题已解决
    从 TDM-GCC 切换到 Mingw-w64,这以某种方式解决了问题。

    最佳答案

    正如上面评论中提到的,它可能不是由于 IPython,它没有理由不工作。
    虽然为了简化在 IPython 中使用 c 定义的函数,您也可以尝试查看 cffi_magic使用 libffi 的原型(prototype)包可以工作。它使(重新)定义函数变得稍微容易一些。

      $ ipython
    Python 3.8.5 | packaged by conda-forge | (default, Sep 16 2020, 17:43:11)
    Type 'copyright', 'credits' or 'license' for more information
    IPython 7.23.0.dev -- An enhanced Interactive Python. Type '?' for help.

    In [1]: import cffi_magic

    In [2]: %%cffi int func(int, int);
    ...: int func(int a, int b){
    ...: return a+b;
    ...: }
    clang-10: warning: -Wl,-export_dynamic: 'linker' input unused [-Wunused-command-line-argument]
    ld: warning: -pie being ignored. It is only used when linking a main executable

    In [3]: func(1, 2)
    Out[3]: 3

    关于python - IPython 支持 ctypes 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67249246/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com