我认为我的货物工作空间中发生了链接器冲突。 一些背景:
我的工作区由 3 个箱子组成:
engine
:通过 ffi 调用 C++ 应用程序的 Rust 箱
engine_rs
:上面的完整 Rust 端口
ffi_test
:用于比较上述输出的板条箱
engine_rs
使用最新版本的
opencv-rs
和
openvino-rs
。
engine
C++ 代码使用系统
opencv
和旧版本
openvino
。我在
{cmake_src_dir}/external/openvino/lib
下的板条箱内本地共享了该 openvino 版本的目标文件
在ffi_test
中,当我单独运行测试,为每个引擎注释代码时,它可以工作:thumbsup_tone1:。 当我同时运行两个引擎时会出现此问题,我需要这样做来比较输出:
Error: openvino_finder: OpenVINO version is too old (see https://github.com/intel/openvino-rs/issues/143): 2022.1.0-7019-cdb9bec7210-releases/2022/1")
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
test rs_engine_test ... FAILED
test cpp_engine_test ... ok
Rust engine_rs
正在尝试使用
openvino
板条箱中的旧版
engine
库,即使它们是单独的板条箱。 我启用了
openvino-rs
并启用了
runtime-linking
。这是我最远的距离了
engine
build.rs:
#[cfg(all(target_os = "linux", target_arch = "x86_64"))]
fn linux_x86_64_main() {
let cpp_engine = cmake::Config::new("./engine")
.no_build_target(true) // Skip `make install`
.build();
println!("cargo:warning=engine output:{}", cpp_engine.display());
println!("cargo:rustc-link-search={}/build", cpp_engine.display());
println!("cargo:rustc-link-lib=engine");
println!("cargo:rustc-link-search=native=fid_engine/engine/external/openvino/lib");
println!("cargo:rustc-link-lib=dylib=openvino");
println!("cargo:rustc-link-lib=dylib=tbb");
println!("cargo:rerun-if-changed=engine/CMakeLists.txt");
}
engine_rs
build.rs:
#[cfg(all(target_os = "linux", target_arch = "x86_64"))]
fn linux_x86_64_main() {
println!("cargo:rustc-link-search=native=/usr/lib");
println!("cargo:rustc-link-lib=openvino_c");
println!("cargo:rustc-link-lib=openvino");
println!("cargo:rustc-link-lib=tbb");
println!("cargo:rustc-link-lib=opencv_core");
println!("cargo:rustc-link-lib=opencv_dnn");
println!("cargo:rustc-link-lib=opencv_imgproc");
println!("cargo:rustc-link-lib=opencv_imgcodecs");
}
我需要在同一测试中运行两个引擎,以便比较输出。我该如何继续这里?