rustにおいて、Cargo.tomlでビルドの成果物としてバイナリや.soなどのライブラリファイルなど様々な形式で出力できますが。この形式は libのcrate_type で指定できます。
... [lib] crate-type = ["cdylib"] ...
このcrate-typeと、その中のタイプの一つであるcdylibについてまとめます。
crate-typeとは
Cargo.tomlにおけるcrate-type
フィールドは、cargoコマンドによるビルド時に生成されるcrate typeを定義します。
crate-typeフィールドは文字列の配列で指定でき、単一のビルドターゲットに対して複数のcrate タイプを指定できます。
バイナリやテスト、ベンチマークの場合はbin
を指定します。
そのほかにも、lib
rlib
dylib
staticlib
proc-macro
が指定できます。
それぞれの詳細についてはrustの公式ドキュメントを確認してください。
doc.rust-lang.org
Cargoのビルドターゲットについての詳細は、下記のCargoに関するドキュメントで確認できます。
crate-type : cdylibについて
他の言語で書かれたプログラムや実行ファイルによって FFI(Foreign Function Interface)などによって呼び出されるような動的なシステムライブラリを生成する場合は crate-typeにcdylib
を指定します。
これを指定した場合、cargoによってビルドした成果物のファイル形式はOSによって異なります。
例えばLinuxでは*.so
、 macOSでは*.dylib
、Windowsでは*.dll
となります。
(参考) rustにおけるFFI(Foreign Function Interface) について
FFIとは今まで知らなかったのですが、ざっくりいうと、あるプログラム言語で書かれたコードから、別のプログラム言語で書かれた関数などを呼び出す機構のことです。
下記の公式ドキュメントと、ブログ記事が参考になったので読んでみてください。