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 (objdump -x を使用) で _ZTIN3foo4some22SomeExceptionE を見つけました。これは、同じ /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 に答える