Как связать библиотеку C без вызова одной из ее функций? - PullRequest
0 голосов
/ 28 апреля 2019

Я бы хотел связать с -lm.Прямо сейчас я делаю это следующим образом:

let _link_lm = f64::sin(3.0);

Я пытался вставить это в .cargo/config:

[build]
rustflags = ["-C", "link-args=-lm"]

Это не динамически связывает библиотеку.Кроме того, использование cargo:rustc-link-lib=m в сценарии сборки аналогично вызову cargo rustc -- -lm, что также не работает.Я проверяю, что библиотека не связана с ldd.

Важно связать библиотеку, потому что это для JIT-компилятора, который может вызывать эти функции, выбирая их, используя dlsym.

Как я могу ссылаться на эту библиотеку, не вызывая одну из ее функций?

1 Ответ

1 голос
/ 29 апреля 2019

Оказывается, rustc вызывает компоновщик с -Wl,--as-needed, поэтому решение для меня было отключить эту опцию:

[build]
rustflags = ["-C", "link-arg=-Wl,--no-as-needed", "-C", "link-arg=-lm"]
...