我正在使用IntelliJ IDEA进行防锈实验。为了了解如何调用用其他语言创建的库,我用C创建了一个微型动态库,其.so文件位于../expclib1/libexp1.so
中。
我如何告知intellij和rust
#[link(name="exp1")]
extern {
fn bacon()->i32;
}
住在../expclib1/libexp1.so
吗?我知道在C语言中,您需要在链接阶段指定-L../expclib1 -lexp1
,然后再尝试运行export LD_LIBRARY_PATH=../expclib1
。我该如何利用货物进行这项工作,以及如何通过intellij的运行菜单进行这项工作? intellij内部的模块上基本上没有选项,因此我希望可以在Cargo.toml
中指定它们。
答案 0 :(得分:1)
可以使用通常位于build.rs
旁边的Cargo.toml
文件指定生锈的额外链接参数。这是一个示例build.rs
:
fn main() {
println!("cargo:rustc-link-search=../expclib1\n\
cargo:rustc-link-search=/opt/oracle-jdk-bin-1.8.0.202/jre/lib/amd64/jli\n\
cargo:rustc-link-search=/opt/oracle-jdk-bin-1.8.0.202/jre/lib/amd64/server\n\
cargo:rustc-link-lib=dylib=exp1\n\
cargo:rustc-link-lib=dylib=jli\n\
cargo:rustc-link-lib=dylib=jvm");
}
关于查找jni和jvm库,该示例可能应该更聪明一些,因为并非每个系统都将运行/opt
中安装的Java 1.8.0.202。
来自输出的设置货物用途记录在防锈文档的Build Scripts部分。
那只会使应用程序链接。要使其运行,您必须通过设置如下环境变量来修改IntelliJ的运行配置: