在python脚本中加载.so文件时出现未定义的符号错误

时间:2012-11-01 09:04:17

标签: c++ python c unix linker

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

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

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

但是,当尝试在python脚本中加载.so文件时,它会给我一个未定义的符号错误。

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

  1. 创建.so文件时是否解析了名称?
  2. 解决.so文件中未定义符号的最佳方法是什么。
  3. E.g。 :

    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的错位名称”

1 个答案:

答案 0 :(得分:0)

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

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