2

私は cpp ライブラリのバインディングに取り組んでいます。これを行うために、ライブラリの capi / ラッパーを作成し、それを共有ライブラリ (.so ファイル) にコンパイルしました。

私の質問は、ユーザーにインストールを強制することなく、このファイルを使用して貨物に統合するにはどうすればよいですか? 現在、Cargo.toml のビルド変数から呼び出される Makefile を介して cpp をビルドしていますが、コンパイルされたライブラリをどうするかわかりません。

テストでは、rpath または LD_LIBRARY_PATH を使用して実行可能ファイルを正しい場所に指定できますが、これはライブラリを配布するときに機能しません。

人々はこれをどのように管理していますか?

4

1 に答える 1

4

まず、共有ライブラリが本当に必要かどうかを判断します。あなたの質問からは明らかではありませんが、独自のラッパーを共有ライブラリにコンパイルした場合、それはおそらく不要です。コードを静的ライブラリにコンパイルして、実行可能ファイルに直接リンクできます。

さらに、そのサードパーティ ライブラリを静的にリンクすることもできます。これは難しいことではないと思います。はい、buildマニフェストでコマンドを使用して、これらすべてを実行する必要があります。

ただし、それでも共有ライブラリを使用する必要があり、エンド ユーザーに自分でインストールさせたくない場合 (共有ライブラリのポイントであるため、これは奇妙です)、手動で配布する必要があります。たとえば、ユーザーが抽出して使用できるアーカイブを作成するメイクファイルを作成できます。プログラムがライブラリを正しく見つけるには、ユーザーにこのアーカイブをシステムのルート ディレクトリにインストールしてもらうか (たとえば/usr、Linux では、この共有ライブラリは自動的に配置されます)、実行可能ファイルの周りに小さなシェル スクリプト ラッパーを記述する必要があります。これにより、共有ライブラリが検索され、適切な が設定されますLD_LIBRARY_PATH

私は最初の道を行きます。通常、すべての主要なプラットフォームは、インストール パッケージを作成する手段を提供します (Linux では deb/rpm/pkg.tar.xz/whatever、Mac では brew、Windows では Windows インストーラーですが、Windows では、共有ライブラリを同じディレクトリに置くことができます)。実行可能で動作します)。ユーザーが作業するプラットフォーム用のパッケージを作成するだけで、プログラムが正しいディレクトリにインストールされ、共有ライブラリが自動的に解決されます。

于 2014-08-24T08:27:45.597 に答える