【发布时间】:2021-11-29 12:59:56
【问题描述】:
我正在编写通过 pybind11 从 Ubuntu 20.04 上的 Python (v3.8) 应用程序调用的 C++ 代码。
运行应用程序出现错误
Traceback (most recent call last):
snip...
ImportError: <full-path>/<lib-name-A>.so: undefined symbol: <mangled symbol name>
ldd on lib-name-A 输出给出了定义符号的 lib B 的绝对路径。库 B 上的 nm -s --demangle 显示符号在文本部分中定义。为了确定起见,我比较了损坏的名称,lib B 中的名称与错误消息中给出的名称相同。
那么,鉴于库存在于 ldd 显示其预期的位置,并且在其中定义了符号,为什么我会收到错误消息?
【问题讨论】:
-
您确定失败的 Python 应用程序和 ldd 应用程序之间的环境相同吗?例如,变量 LD_LIBRARY_PATH 可能不同?使用 LD_DEBUG=files 是否会显示您失败的 Python 应用程序加载的库是您所期望的?
标签: c++ ubuntu shared-libraries cannot-find-symbol