我有一些C++代码,为此我创建了一个.so文件。

我的目标是在python脚本中加载此.so文件。

为了公开C++方法,我为它们创建了一个C包装器方法并公开了C方法。

但是,当尝试在python脚本中加载.so文件时,它给了我一个Undefined symbol错误。

这些错误是针对某些C++类内部使用的方法,并且不会在.so文件中公开。 (nm -C -u .so)

  • 创建.so文件时,名称不解析吗?
  • 什么是解决.so文件中 undefined symbol 的最佳方法?

  • 例如。 :
    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脚本中时,出现如下错误:
    undefined symbol :“func1的混合名称”

    最佳答案

    链接.o时,您忘记包含定义这些功能的对象(.so文件)。

    链接共享对象时,默认情况下,链接器不会对未解析的符号产生错误,因为在将库链接到最终可执行文件时,这些符号可能由另一个对象提供。您可以使用--no-undefined 链接器标志来明确告诉链接器给出该错误。要通过g++(或clang++)驱动程序传递它,请将其编写为-Wl,--no-undefined

    关于c++ - 在python脚本中加载.so文件时出现 undefined symbol 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13173860/

    10-11 22:53
    查看更多