タイトルは正しかったので、私の状況を説明しましょう:ヘッダーファイルを使用してダイナミックライブラリのロードを正しく設定するにはどうすればよいですか?
別のチームがライブラリを開発しています。彼らはヘッダーファイルと*.so
ファイルを発送します。ヘッダーファイルは私たちに利用可能であり、私たちはそれを自分のコードに組み込み、望むならそれを使うことができます。しかし、*.so
は、私たちが運営するプラットフォームに同梱されています。当社のソフトウェアの構築時にこの*.so
にアクセスすることはできません。このため、リンカはある時点で*.so
が利用可能であると予想しているので、実際にはヘッダファイルも使用できません。
今は、実行時に*.so
ファイルをロードし、次にdlsym()
を使用して関数を名前で検索し、それらを関数ポインタにマップするラッパークラスを作成します。
これは唯一のオプションですか?私はヘッダーファイルを使用することができますが、リンカーにビルド時にシンボルを解決しないように指示しますが、代わりに実行時に*.so
ファイルをロードするチャンスがあった後にそれらを解決しようとしますか?
ここで実際のプラットフォームはAndroid(NDK経由)ですが、一般的なLinuxのアドバイスはこの場合POSIX APIが利用可能であることを期待しています。
私は#1が最も好きです。欠点は、デバイス上のファームウェアリリースで「自動的に」取得するのではなく、新しいバージョンをリリースするたびに最新のライブラリを入手する必要があることです。 –
理想的には、彼らはヘッダーの横にあなたにそれを提供します。 –
私の言うことは、ほとんどの場合、パブリックインターフェイスは変更されず、実装だけです。それで、私はそれをどうにかアップグレードするべきですか、あるいは何らかの形でABIの非互換性を作成し、それらをアップグレードするだけでよいのですか? –