Предоставлять символы динамическому компоновщику при компоновке с родной библиотекой в ​​Rust

Я создаю двоичный исполняемый файл на Rust, и ему нужно связать нативную библиотеку, скажем, foo.a. foo.a содержит символ void bar(void), который я хотел бы предоставить динамическому компоновщику в качестве функции обратного вызова, которую можно вызывать из функций в динамически загружаемой библиотеке в стиле dlopen.

Это можно сделать в ld, предоставив -rdynamic, если мы используем источник C.

gcc -rdynamic -o a_dynamic main.c foo.c

Как правильно это сделать в Rust? Я пробовал использовать cargo:rustc-flags=-rdynamic в build.rs, а также

#![feature(link_args)]
#[link_args = "-rdynamic"]

Ни то, ни другое не работает.


person WiSaGaN    schedule 04.12.2015    source источник
comment
Просто дикая догадка - используйте cargo:rustc-flags=-C link-args=-rdynamic. Аргументы компоновщику передаются через опцию -C link-args в rustc.   -  person Vladimir Matveev    schedule 04.12.2015
comment
@VladimirMatveev Пробовал. Неудачно.   -  person WiSaGaN    schedule 07.12.2015


Ответы (1)


На сегодняшний день набор инструментов Rust не рекомендует передавать компоновщику произвольные флаги. Самое близкое, что мы можем сделать, это использовать cargo rustc и вручную добавить аргументы ссылки.

cargo rustc -- -C link-args='-rdynamic'
person WiSaGaN    schedule 20.01.2016