3

我正在尝试使用cassandra-rs构建一个测试应用程序,该应用程序使用DataStax CPP 驱动程序。我正在使用cargo 0.6.0 (ec9398e 2015-09-29) (built from git).

我的 DataStax 驱动程序不在 Cargo 查找的标准目录中。

我添加了一个构建脚本,指定了 DataStax 驱动程序的路径:

fn main() {
    println!("cargo:rustc-link-search={}", "/path/to/dir/");
}

这是我的 Cargo.toml:

[package]
name = "castest"
version = "0.1.0"
build = "build.rs"

[dependencies]
cassandra="*"

cargo build --verbose显示构建时不包含附加的搜索目录。

构建实际失败的包是 cql_bindgen,它是 cassandra-rs 的依赖项。在那个项目中有这个 build.rs:

fn main() {
    println!("cargo:rustc-flags=-l dylib=crypto");
    println!("cargo:rustc-flags=-l dylib=ssl");
    println!("cargo:rustc-flags=-l dylib=stdc++");
    println!("cargo:rustc-flags=-l dylib=uv");
    println!("cargo:rustc-link-search={}", "/usr/lib/");
    println!("cargo:rustc-link-search={}", "/usr/local/lib64");
    println!("cargo:rustc-link-lib=static=cassandra_static");
}

如何在依赖项目中设置的项目中添加其他库或以其他方式覆盖配置?

4

1 回答 1

2

板条箱的下游用户不能更改该板条箱的编译方式,除非通过板条箱公开的功能

当链接到现有的本地库时,Cargo构建脚本用于帮助找到要链接到的适当库。

此处正确的解决方案是修复上游 crate (cql_bindgen) build.rs以允许最终用户指定备用路径以在其中进行搜索。一种方法是使用option_env!宏,例如:

if let Some(datastax_dir) = option_env!("CQL_BINDGEN_DATASTAX_LIB_PATH") {
    println!("cargo:rustc-link-search={}", datastax_dir);
}

当然,您可以在迭代时使用本地版本覆盖依赖项,以获得在本地工作的解决方案。

同时,您可以尝试将您的库安装在已经搜索过的硬编码目录之一中。

于 2015-09-30T13:59:55.777 回答