【问题标题】:Use Python in C [closed]在 C 中使用 Python [关闭]
【发布时间】:2016-06-10 22:42:29
【问题描述】:

对于用 C 编写的程序,我需要使用仅在 Python 中可用的功能。我找到了几个可以帮助我的资源,但 one of them 给了我编译代码的命令:

gcc -I/usr/include/python2.7 prog.c -lpython2.7 -o prog -Wall  && ./prog 

我不得不把它改成

gcc -I/usr/include/python3.4 prog.c -lpython3.4 -o prog -Wall  && ./prog

但编译器返回:

/usr/bin/ld: cannot find -lpython3.4 collect2: error: ld returned 1 exit status 

这是我第一次使用gcc,所以即使看示例我也真的不明白该怎么做。

【问题讨论】:

  • 您使用哪种操作系统?
  • 您可能需要为您的系统安装相关软件包。您可能想先看看relevant section of the Python manual
  • 我做了,但我不明白为什么它解释了当另一个人似乎设法在没有它们的情况下编译他的代码时,我必须使用它给出的命令来找到正确的标志。
  • 如果您能说出您想使用哪些功能,可能还有其他方法(例如现有的 C 数据结构库)来访问这些功能,这比从 C 访问 Python 库更容易。跨度>
  • 尝试以超级用户身份运行ldconfig,同时安装一些我发现有必要调用它的C库,然后才能使用-l

标签: python c gcc


【解决方案1】:

您是否尝试过使用 Cython 连接 C 和 Python?

手册可以在这里找到:https://python.g-node.org/python-summerschool-2011/_media/materials/cython/cython-slides.pdf

在第 4.10 节中,它简要介绍了 python 和 C 的接口。我的想法是,您可以从 Cython 调用您的 C 代码,这样您就可以完整而直接地访问您想要使用的 Python 功能。

这里有更多关于与外部 C 代码接口的内容:

http://cython-docs2.readthedocs.io/en/latest/src/userguide/external_C_code.html

【讨论】:

    【解决方案2】:

    以root用户运行ldconfig,重建缓存并更新符号链接:

    sudo ldconfig
    

    ldconfig 创建必要的链接并缓存到在命令行上指定的目录中找到的最新共享库,在文件 /etc/ld.so.conf,以及受信任的目录(/lib/usr/lib)。缓存由运行时链接器 ld.sold-linux.so 使用。 ldconfig 在确定应该更新链接的版本时检查它遇到的库的标头和文件名。

    [...]

    来源:man ldconfig

    如果这不起作用,请使用 -p 选项并找到 Python 库的名称:

    ldconfig -p | grep python
    

    除非您有特殊原因,否则请使用文件名最小的那个。

    -p

    打印当前缓存中存储的目录和候选库列表。

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 2021-10-31
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 2012-08-20
      • 2013-06-11
      • 2017-03-20
      • 1970-01-01
      相关资源
      最近更新 更多