Как мне сказать Rust, где искать статическую библиотеку?

Есть ли способ сказать Rust, где искать мою статическую библиотеку? Пример кода

#[link(name = "/this/is/the/path/libfoo.a", kind = "static")]

Если нет, какое изменение конфигурации я могу сделать или в какую папку я помещаю свою библиотеку, чтобы я мог ее использовать?

2 ответа

Решение

rustc вызывает системный компоновщик, который ищет все библиотеки, указанные в #[link(...)] в каталогах библиотеки. Обычно есть несколько библиотек по умолчанию (например, /lib а также /usr/lib в Linux) и многое другое можно указать с помощью флагов компоновщика (rustc принимает -L опции, которые он затем передает компоновщику).

Если вы вызываете rustc напрямую, вы можете использовать -L возможность добавить дополнительные каталоги библиотеки, которые затем будут переданы компоновщику. Однако если вы используете Cargo, у вас есть еще несколько вариантов:

  • Cargo добавляет /target/<profile>/deps каталог в качестве исходного каталога библиотеки.

  • Ты можешь использовать cargo rustc

    cargo rustc -- -L /path/to/library/directory 
    
  • Вы можете указать RUSTFLAGS переменная окружения:

    RUSTFLAGS='-L /path/to/library/directory' cargo build
    
  • Вы можете использовать скрипт сборки для вывода дополнительных параметров компоновщика

    println!("cargo:rustc-link-lib=static=foo");
    println!("cargo:rustc-link-search=native=/path/to/foo");
    

Я думаю, что самый простой способ для вас - добавить собственный скрипт сборки, который будет копировать или создавать символическую ссылку на вашу библиотеку в соответствующем /target/<profile>/deps каталог.

Чтобы добавить к принятому ответу, у меня сработало следующее:

  • под отладочной сборкой, помещая файлы зависимостей в target/debug/deps работал; но положить файлы под target/debug/native/* не похоже на работу.

Груз, кажется, только смотреть под target/debug/deps по умолчанию.

Вы можете бегать с cargo build --verbose увидеть многословно rustc команды и используемые параметры. -L опция определяет дополнительную директорию зависимости ссылки.

Другие вопросы по тегам