gpt4 book ai didi

c++ - 在python脚本中加载.so文件时出现 undefined symbol 错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:52:58 27 4
gpt4 key购买 nike

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

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

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

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

这些错误是针对某些 C++ 类内部使用的方法,未暴露在 .so 文件之外。 (nm -C -u .so)

  1. 创建 .so 文件时是否解析名称?
  2. 解决 .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 的损坏名称”

最佳答案

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

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com