将Python C扩展链接到另一个库时出现问题

2024-09-30 14:30:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个Python扩展,允许在Raspberry Pi上运行的脚本控制sensor。传感器制造商为我的组织提供了C API的源代码,我正在尝试创建一组绑定,以使传感器可以在Python脚本中访问。你知道吗

API源附带的makefile创建了一组对象文件,然后我使用以下命令将这些文件链接到一个库(libvl53l1.a):

银币-cvq libvl53l1.a*.o

然后我将这个库添加到设置.py通过添加此标志编写我的扩展脚本:

额外的编译参数=[“-l:libvl53l1.a”]

代码、库和设置.py为方便起见,脚本当前位于同一目录中。使用命令(python3)将库安装到Python中设置.pybuild(ext--inplace)运行时没有错误,但是,当我尝试在Python解释器中导入库时,导入失败,因为扩展名的.so文件中有一个未定义的符号“VL53L1\u WaitDeviceBooted”。列出libvl54l1.a中的符号:

nm libvl53l1.a | grep“VL53L1|u WaitDeviceBooted”

显示库确实公开了此名称的符号。因此,我认为链接器无法将扩展链接到此静态库。是不是我错过了一个步骤导致了这一切?我还尝试删除Python文档中建议的.a扩展,但没有成功。你知道吗

谢谢


Tags: 文件py命令脚本api链接pi符号
1条回答
网友
1楼 · 发布于 2024-09-30 14:30:44

extra_compile_args=["-l:libvl53l1.a"]

此设置将-l:...添加到编译命令,但编译器忽略该选项,因为它是一个链接选项,编译器不执行任何链接。你知道吗

您需要:extra_link_args=["-lvl53l1"],它将-lvl53l1添加到link命令中(链接器在执行链接时不会忽略该选项)。你知道吗

相关问题 更多 >