我正在尝试为我们拥有的供应商编写C ++库的Python绑定。我正在前进,但这很痛苦(部分原因是我们没有图书馆的资源)。
现在,gcc(4.4.4)抱怨它找不到一些Exception类:
Load library for "FOO_Sessions" failed, the system error message is "/home/djc/foo/lib/libFOO_Sessions.so: undefined symbol: _ZTIN3foo4some22SomeExceptionE"
但是,我在libFOO_Elsewhere(使用objdump -x)中找到了_ZTIN3foo4some22SomeExceptionE,它可以在/ home / djc / foo / lib / dir中找到,并且已经在编译器调用时使用-l开关引用。 / p>
LD_DEBUG =所有报告以下内容(感谢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条目中吗?
答案 0 :(得分:1)
在运行之前将LD_LIBRARY_PATH设置为/ home / djc / foo / lib /,或者在libFOO_Sessions.so之前显式加载依赖库。 man ld-linux
解释了动态链接器将如何搜索。
编辑:
此外,在运行之前设置LD_DEBUG=all
以查看动态链接器的搜索方式。