如何在构建脚本中指定链接器标志/参数?

时间:2018-06-01 11:37:13

标签: rust ffi

我正在使用Rust,bindgenbuild script来处理对库的一些FFI绑定。

这个库是使用OpenMP构建的,所以当链接它时,我通常会将-fopenmp标志传递给编译器。

当Cargo构建库时,如何通过build.rs设置此标志?

目前,使用Cargo构建失败,失败的命令类似于:

cc -Wl,--as-needed -Wl,-z,noexecstack -m64 -l gomp -l stdc++
...skipping dozens of paths/files...
 -Wl,-Bdynamic -l dl -l rt -l pthread -l gcc_s -l c -l m -l rt -l pthread -l util

因数百undefined reference to 'GOMP_parallel_end'个错误而失败。

重新运行上面生成的命令并手动添加-fopenmp标志成功。

我可以在编译之前使用RUSTFLAGS='-C link-args=-fopenmp'指定标记,但有没有办法在build.rs内指定它?

1 个答案:

答案 0 :(得分:5)

你做不到。相反,您可以使用货物configuration file

.cargo /配置

[build]
rustflags = ["-C", "link-args=-fsome-artisanal-option"]

执行

$ cargo build --verbose
   Compiling example v0.1.0 (file:///private/tmp/example)
     Running `rustc ...blah blah blah... -C link-args=-fsome-artisanal-option`
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-m64" ...blah blah blah... "-fsome-artisanal-option"
  = note: clang: error: unknown argument: '-fsome-artisanal-option'

另见: