0

我正在尝试为我们拥有的供应商的 C++ 库编写 Python 绑定。我正在继续前进,但这很痛苦(部分原因是我们没有图书馆的源代码)。

现在,gcc(4.4.4)抱怨一些它找不到的异常类:

Load library for "FOO_Sessions" failed, the system error message is "/home/djc/foo/lib/libFOO_Sessions.so: undefined symbol: _ZTIN3foo4some22SomeExceptionE"

但是,我在 libFOO_Elsewhere 中找到了 _ZTIN3foo4some22SomeExceptionE(使用 objdump -x),它可以在同一个 /home/djc/foo/lib/ 目录中找到,并且已经使用编译器调用上的 -l 开关进行了引用。

LD_DEBUG=all 报告以下内容(感谢 Erik 的建议):

/home/djc/foo/lib/libFOO_Sessions.so: error: symbol lookup error: undefined symbol: _ZTIN3foo4some22SomeExceptionE (fatal)

但是,objdump -p 会为 libFOO_Sessions.so 报告此情况:

Dynamic Section:
  NEEDED               libFOO_Connections.so
  NEEDED               libFOO_Session_Base.so
  NEEDED               libstdc++.so.6
  NEEDED               libm.so.6
  NEEDED               libgcc_s.so.1
  NEEDED               libc.so.6
  SONAME               libFOO_Sessions.so

libFOO_Elsewhere(包含 _ZTIN3foo4some22SomeExceptionE)不应该也在 libFOO_Sessions 的 NEEDED 条目中吗?

4

1 回答 1

1

运行前将LD_LIBRARY_PATH设置为/home/djc/foo/lib/,或者在libFOO_Sessions.so之前显式加载依赖库。man ld-linux解释动态链接器将如何搜索。

编辑:

此外,LD_DEBUG=all在运行前设置以查看动态链接器如何搜索。

于 2011-02-21T16:12:15.863 回答