簡體   English   中英

將Python C擴展鏈接到另一個庫的問題

[英]Issue with Linking Python C Extension to Another Library

我正在開發Python擴展,以允許在Raspberry Pi上運行的腳本控制傳感器 傳感器制造商向我的組織提供了其C API的源代碼,並且我正嘗試創建一組綁定以使傳感器可以在Python腳本中訪問。

API源附帶的makefile創建了一組目標文件,然后使用以下命令將它們鏈接到一個庫(libvl53l1.a)中:

ar -cvq libvl53l1.a * .o

然后,我通過添加以下標志將此庫添加到我的擴展程序的setup.py腳本中:

extra_compile_args = [ “ - 1: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擴展名,但無濟於事。

謝謝

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

此設置將-l:...添加到編譯命令,但是編譯器將忽略該選項,因為它是一個鏈接選項,並且編譯器不執行任何鏈接。

您需要: extra_link_args=["-lvl53l1"] ,這會將-lvl53l1添加到鏈接命令中(鏈接器在執行鏈接時不會忽略該選項)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM