Ich versuche, ein Problem mit dem Laden von fremden Bibliotheken mit Rust zu lösen.Rost und Ladepfade (@rpath, @loader_path) auf OS X
Eingänge:
Ich habe eine ausführbare rtest
und dylib libcpp2rs.dylib
. Die Bibliothek ist an die ausführbare Datei durch FFI verbunden:
#[link(name="cpp2rs")]
extern { ... }
Meine build.rs
Datei (ich vorbei ein zusätzliches Argument mit libcpp2rs.dylib
Standort):
pub fn main() {
println!("cargo:rustc-link-search=native=./cpplib/bin");
}
Und meine Cargo.toml
Datei:
[package]
name = "rtest"
version = "0.1.0"
authors = ["astavonin"]
build = "build.rs"
rpath = true
[dependencies]
libc = "0.2.10"
Und ich verwende cargo build
Befehl zum Kompilieren.
Ausgänge:
otool
zeigt mir, dass Bibliothek von RPATH
geladen werden:
> 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)
Aber zugleich gibt es keine LC_LPATH
Abschnitt in ausführbarer:
> otool -l rtest | grep LC_RPATH
>
Und es führt meine Anwendung zu einem Ladefehler:
> ./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
Dieses Problem kann durch install_name_tool
Verwendung behoben werden, aber ich bevorzuge keine zusätzlichen Schritte in den Kompilierungsprozess einzuführen.
- Ist es möglich (und wie) Ladetyp von @rpath zu ändern Skript mit
cargo
Konfigurationen/bauen @loader_path? - Kann @rpath-Wert an
cargo
übergeben werden?
Bitte [Bearbeiten] Ihre Frage zu schließen, wo 'libcpp2rs.dylib' befindet, wie Sie informiert Rust, wo es ist, und wie Sie den Code bauen. – Shepmaster