将Python C扩展链接到另一个库的问题

时间:2018-06-29 22:57:41

标签: python c linker object-files python-extensions

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

API源随附的makefile创建了一组目标文件,然后我使用以下命令将它们链接到一个库(libvl53l1.a)中:

ar -cvq libvl53l1.a * .o

然后我通过添加以下标志将此库添加到我的扩展程序的setup.py脚本中:

extra_compile_args = [“-l:libvl53l1.a”]

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

nm libvl53l1.a | grep“ VL53L1_WaitDeviceBooted”

表明该库确实公开了该名称的符号。因此,我认为链接器无法将扩展名与此静态库链接。我是否缺少导致此问题的步骤?我也曾尝试删除Python文档中建议的.a扩展名,但无济于事。

谢谢

1 个答案:

答案 0 :(得分:0)

  

$sql2=INSERT INTO members (username, email, password, balance) VALUES ('$new_player', '$new_email', '$new_password', 20);

此设置将extra_compile_args=["-l:libvl53l1.a"]添加到 compilation 命令,但是编译器忽略该选项,因为它是 linking 选项,并且编译器不执行任何链接。

您需要:-l:...,它将为链接命令添加extra_link_args=["-lvl53l1"](链接器在执行链接时不会忽略该选项)。