[英]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)
例如:
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.