Eric
Eric

Reputation: 1243

Dealing with dependencies of cargo crates

I am new to Rust, so excuse me if im just doing things horribly wrong.

While larning the language i wanted to try out different bindings of libraries that i already used in other languages, amongst them SDL2, SFML2, Gtk3.

To my surprise, nothing seemed to work out of the box. They all depend on C libraries and those don't come with the cargo crate. I managed to get SFML2 to work after following the readme and manually copying .lib and .dll files to the right places. I tried to make the Rust linker to look into my vcpk directory for .lib files, sadly with no success.

The whole point of a package manager kind of is to automate these things for you. Other package managers like NuGet for C# dont require you to manually fiddle the dependencies for their packages together.

Getting rid of the thirdparty library management hell of C/C++ was one of the reasons why i took a closer look at Rust.

Am i doing something wrong, or is this just how things are with Rust/Cargo?

Upvotes: 0

Views: 778

Answers (1)

harmic
harmic

Reputation: 30577

Cargo is a build management and source package management tool for Rust code - it is not a tool for managing binaries or compiling other languages such as C or C++.

Having said that, it is a very flexible tool so it is possible for crates that provide bindings to libraries written in other languages to "bundle" the libraries they depend on.

The Rust-SDL2 crate, for example, does offer such a feature - as it says in their README:

Since 0.31, this crate supports a feature named "bundled" which downloads SDL2 from source, compiles it and links it automatically.

To use this, you would would add it to your Cargo.toml like this:

[dependancies]
sdl2 = { version = "0.34.0", features=["bundled"] }

Not all such binding crates support bundling, especially if the libraries they bind to are large, complex, have lots of their own dependencies and/or have lots of compile time configuration options.

In those cases you will either need to install a pre-compiled binary, or compile them from source yourself.

Upvotes: 4

Related Questions