Как я могу указать флаги / аргументы компоновщика в скрипте сборки? - PullRequest
0 голосов
/ 01 июня 2018

Я использую Rust, bindgen и сценарий сборки для работы с некоторыми привязками FFI к библиотеке.

Эта библиотека построена с использованием OpenMP , поэтому при связывании с ним я обычно передаю флаг -fopenmp компилятору.

Как мне установить этот флаг с помощью build.rs при сборке библиотекиby Cargo?

В настоящее время сборка с использованием 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 голосов
/ 01 июня 2018

Вы не можете.Вместо этого вы можете использовать файл конфигурации Cargo .

.cargo / config

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

См. Также:

...