8

関数への未定義の参照を示すリンカ エラーがあります。関数があると予想される共有ライブラリにはその関数名があります( nm -s で確認しました)ので、次に見たいのは関数パラメーターが正しいかどうかです。共有オブジェクト ファイル内の関数のパラメーターの型と数を確認するにはどうすればよいですか?

編集:問題は次のとおりです:共有CオブジェクトをリンクしてC++共有オブジェクトファイルを作成しようとしていましたが、C++ソースでは「extern "C"」ブロック内にヘッダーを含めていなかったため、これらのシンボルを見つけることができませんでした。この質問に回答してくれたすべての人に感謝します。この質問は現在解決されています。

4

4 に答える 4

8

nmオプションで使用でき--demangleます:

nm -s --demangle libWhatever.so

サンプル .so でそれを試してみると、次のような出力が得られます

00005820 T detail::print_(std::ostream&, cv::Mat const&, std::string const&)

Tjust は、それが を作成するために使用されるオブジェクト ファイル内に.soあり、リンカーによって解決される必要がないことを意味します。

于 2012-05-08T14:38:38.957 に答える
3

あなたはおそらく欲しい:

nm --demangle --defined-only --dynamic x.so

上記は C++ の名前をデマングルし、動的セクションで定義されたシンボルのみを表示します。これは、リンクできる外部リンケージを持つ定義済みシンボルです。

于 2012-05-08T20:38:51.320 に答える
2

マングルされた名前に対して c++filt を実行してみてください。それはそれを解読し、引数を見ることができます。

于 2012-05-08T14:33:15.323 に答える
0

したがって、問題は次のとおりです。共有CオブジェクトをリンクしてC++共有オブジェクトファイルを作成しようとしましたが、C++ソースでは、「extern "C"」ブロック内にヘッダーを含めていなかったため、そうではありませんでしたこれらのシンボルを見つけることができました。この質問に回答してくれたすべての人に感謝します。この質問は現在解決されています。

于 2012-05-09T00:06:34.130 に答える