繁体   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