簡體   English   中英

在python腳本中加載.so文件時出現未定義的符號錯誤

[英]Undefined symbol error while loading .so file in python script

我有一些C ++代碼,為此我創建了一個.so文件。

我的目標是在python腳本中加載此.so文件。

為了公開C ++方法,我為它們創建了一個C包裝器方法並公開了C方法。

但是,當嘗試在python腳本中加載.so文件時,它給了我一個Undefined symbol錯誤。

這些錯誤是針對某些C ++類內部使用的方法,並且不會在.so文件中公開。 (nm -C -u .so)

  1. 創建.so文件時,名稱不解析嗎?
  2. 解決.so文件中未定義符號的最佳方法是什么?

例如:

C++ :
class myclass {
public:
     void func1(int _i);
     int getval();
};

C wrapper :
extern "C" int getval_w();

int getval_w() {
    myclass obj;
    return obj.getval();
}

因此,當我在.so文件中編譯此代碼並在python腳本中加載該代碼時,我得到如下錯誤:未定義符號:“ func1的名稱混亂”

鏈接.so時,您忘記包含定義這些功能的對象( .o文件)。

鏈接共享對象時,默認情況下,鏈接器不會對未解析的符號產生錯誤,因為在將庫鏈接到最終可執行文件時,這些符號可能由另一個對象提供。 您可以使用--no-undefined 鏈接器標志明確告訴鏈接器給出該錯誤。 要使其通過g++ (或clang++ )驅動程序,請將其編寫為-Wl,--no-undefined

暫無
暫無

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

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