python 调用C 动态库 提示can not find symbol

本文介绍如何解决Python调用C++函数时遇到的问题,包括正确编译C++代码为共享库并确保函数名与Python期望一致的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为算法效率问题所以要在python中调用C, 

先写一个C函数:

cc.cpp:

int ts(int a, int b) {

    return a * b;

}

编译 :

 g++ -c -fPIC cc.cpp

 g++ -shared cc.o -o libcc.so

然后在python中调用ts函数:

ts.py:

from ctypes import *

import os

libcc = cdll.LoadLibrary(os.getcwd() + '/libcc.so')

print libcc.ts(2,3)

运行:

python ts.py

出错:******can not find symbol ts

谷歌了一下,发现是因为c++编译后的文件会把函数名改名(为了实现重载功能)

用extern "C"声明后,就会使用c的方式进行编译,编译后的文件中仍然是定义的函数名

所以只要讲c库中的代码改为:

extern "C"{

    int ts(int, int);

}

int ts(int a, int b) {

    return a * b;

}

一切正常

### 解决 Python 包安装时不到满足 `symbol` 依赖的问题 当遇到 `No matching distribution found for symbol` 错误时,这通常意味着 pip 无法到指定名称的软件包。以下是几种可能的原因以及相应的解决方案: #### 验证拼写准确性 确认输入的包名是否完全正确。Python 的包命名通常是区分大小写的,并且可能存在不同的版本或变体。 #### 更新 Pip 和 Setuptools 有时旧版工具可能导致兼容性问题。建议更新至最新稳定版本: ```bash pip install --upgrade pip setuptools wheel ``` #### 使用可信源并配置镜像站点 如果默认 PyPI 源出现问题,可以尝试切换到其他可靠的国内镜像站来加速下载过程并提高成功率。例如阿里云提供的 pypi 镜像服务[^4]: ```bash pip install symbol -i https://mirrors.aliyun.com/pypi/simple/ ``` #### 安装 SSL 认证文件 对于因网络连接引发的安全验证失败情况(如 SSLEOFError),可以通过升级证书库解决问题[^2]: ```bash sudo pip install --upgrade certifi open /Applications/Python\ 3.x/Install\ Certificates.command ``` 注意替换命令中的 "3.x" 为实际使用的 Python 版本号。 #### 调整环境变量与解释器路径一致性 确保 Jupyter Notebook 所调用的是预期的那个 Python 环境及其对应的 pip 工具。可通过以下方式检查当前工作环境中可用的 Python 库位置列表[^1]: ```python import sys print(sys.executable) # 查看正在运行的 Python 可执行文件的位置 !which pip # 或者在终端里使用 which 命令定位 pip ``` #### 创建独立虚拟环境 为了避免不同项目之间的依赖冲突,推荐针对每个具体应用创建单独的 virtualenv 或 conda env 来管理各自的依赖关系。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值