3

Rust を使用した外部ライブラリの読み込みに関する問題を解決しようとしています。

入力:

実行可能ファイルrtestと dylibがありlibcpp2rs.dylibます。ライブラリは、FFI を介して実行可能ファイルにリンクされています。

#[link(name="cpp2rs")]
extern { ... }

私のbuild.rsファイル(libcpp2rs.dylib場所に追加の引数を渡しています):

pub fn main() {
    println!("cargo:rustc-link-search=native=./cpplib/bin");
}

そして私のCargo.tomlファイル:

[package]
name = "rtest"
version = "0.1.0"
authors = ["astavonin"]
build = "build.rs"
rpath = true
[dependencies]
libc = "0.2.10"

そしてcargo build、コンパイルにはコマンドを使用します。

出力:

otoolライブラリが次のようにロードされることを示していますRPATH

> otool -L rtest
rtest:
@rpath/libcpp2rs.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

しかし同時にLC_LPATH、実行可能ファイルにはセクションがありません:

> otool -l rtest | grep LC_RPATH
>

そして、それは私のアプリケーションを読み込みエラーに導きます:

> ./rtest 
dyld: Library not loaded: @rpath/libcpp2rs.dylib
  Referenced from: /Users/astavonin/projects/Tests/rtest/target/debug/./rtest
  Reason: image not found
zsh: trace trap  ./rtest

この問題は使用法によって修正できますがinstall_name_tool、コンパイル プロセスに追加の手順を導入しないことをお勧めします。

  1. cargo構成/ビルドスクリプトを使用して、ロードタイプを @rpath から @loader_path に変更することは可能ですか?
  2. @rpath 値をに渡すことは可能cargoですか?
4

1 に答える 1