Linux で共有ライブラリ (.so) を作成しましたが、非常に奇妙な問題に直面しています。最初に、ライブラリに 3 つの関数 (write_myown、setfolder、register) を追加し、さらにいくつか (init、write_re) を追加しました。
基本的にライブラリ全体は C++ で実装されていますが、API は C および C++ ベースの実行可能ファイルの両方から呼び出す必要があります。したがって、私は API に extern "C" を使用しました。
私が直面している奇妙な問題は、関数 write_myown、setfolder、および登録を使用しようとすると、リンクが通過し、実行可能ファイルが作成されることです。
しかし、関数 init または write_re を呼び出そうとすると、リンクが失敗し、未定義の参照エラーが発生します。
私が考えているが確信が持てないさらに奇妙なことは、Cのみのプログラムを構築している場合は正常に動作すると思いますが、C++ベースのコードを構築している場合、この問題が見られます。
私はすでに以下のことを確認し、確認しました
- ライブラリ(.so)は /usr/lib に存在します(そこに置きました)
- ldconfig -p | grep mylibname は、私のライブラリが存在することを示しています。
- init または write_re を呼び出さないと、実行可能ファイルが生成され、objdump/readelf に適切な参照が表示されます。
- mylibrary.so の ldd は、init と write_re の両方が存在することを示しており、可視性はグローバルです。
- 作成された実行可能ファイルまたは .0 は、mylibrary への適切な依存関係を示しています。
- mylibrary のバージョンはありません。
- 正しい.soを参照していることを確認しました。
- 私のライブラリの nm は、すべての関数が存在することを示しています。
どうすればこれを解決できますか?そして、何が問題になる可能性があります。そうでない場合は、どうすれば調査を進めることができますか。さらに詳細が必要な場合はお知らせください。
よろしく、 パヴァン