Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k views
in Technique[技术] by (71.8m points)

rust - How can I specify linker flags/arguments in a build script?

I'm using Rust, bindgen, and a build script to work on some FFI bindings to a library.

This library is built using OpenMP, so when linking against it, I'd normally pass the -fopenmp flag to the compiler.

How can I get this flag to be set by build.rs when the library is built by Cargo?

Currently, building using Cargo fails, with the failing command being something like:

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

which fails with hundreds of undefined reference to 'GOMP_parallel_end' errors.

Rerunning the generated command above with the -fopenmp flag manually added succeeds.

I can specify the flag using RUSTFLAGS='-C link-args=-fopenmp' before compiling, but is there a way of specifying it from within build.rs?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You cannot. Instead, you can use a Cargo configuration file.

.cargo/config

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

Execution

$ 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'

See also:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...