簡體   English   中英

從Python加載動態共享C ++庫時出現問題

[英]Problem in loading dynamic shared c++ library from Python

我已經建立了一個鏈接到.so的項目SharedProj 它鏈接了另外4個構建到靜態庫的項目: libA.a,libB.a,libC.a,libD.a 這些項目在SharedProj.so中設置為引用,並與-l標志鏈接。

當我嘗試使用cdll.LoadLibrary從Python加載SharedProj.so時 ,它失敗,並出現以下異常:“找不到libA.so-沒有這樣的文件”。 是的,這確實是真的:沒有libA.so ,也不應該這樣。 libA.a ,它是靜態鏈接的。

這里有什么問題? 如何正確構建SharedProj.so ,以便Python正確加載?

我嘗試將SharedProj.so與-shared或-shared-libgcc標志鏈接。 嘗試使用-static或-static-libgcc標志構建靜態庫。 試圖添加或刪除-fPIC標志。

我已經解決了Eclipse IDE中的問題。 顯然,問題在於我的靜態庫libA.a,libB.a,libC.a使用了另一個庫,例如math lib,並且我沒有指定鏈接程序必須在其中搜索它們的位置。 在最后的鏈接指令中,我通過-L標志傳遞我的靜態庫文件夾和/ lib文件夾。 使用-l標志,可以指定靜態庫的名稱: libA,libB,libC 此外,還包括以下標志: -shared -shared-gcclib -m64此外,還必須包括指向鏈接器的指令,以將所有符號拉入.so:-Wl,-整個歸檔all_the_static_libs.a -Wl,- -不存檔。 因此,最后,鏈接線如下所示:

g++ -L"%workspace/libA/Debug" -L"%workspace/libB/Debug" -L"%workspace/libC/Debug" -L/lib -Wl,--whole-archive -llibA -llibB -llibC -Wl,--no-whole-archive -m64 -shared-libgcc -shared -o "SharedProj.so" ./SharedProj.o

暫無
暫無

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

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