cbc-src crate is a *-src crate. This links Cbc libraries to executable build by cargo, but does not provide Rust bindings. [Cbc] build with [CoinUtils] ([CoinUtils-src]), [Osi] ([Clp-src]), [Cgl] ([Cgl-src]) and [Clp] ([Clp-src]) support.
By this package, you don't need to worry about installing CBC in the system, and it can be built for all platforms.
Cbc (Coin-or branch and cut) is an open-source mixed integer linear programming solver written in C++. It can be used as a callable library or using a stand-alone executable. It can be used in a wide variety of ways through various modeling systems, packages, etc.
Just add the following to your Cargo.toml
:
toml
[dependencies]
cbc-src = "0.2"
This package does not provide bindings. Please use [coincbc-sys], [coinclp-sys] to use Cbc, Clp, e.g.
toml
[dependencies]
coincbc-sys = { version = "0.2" }
The following Cargo features are supported:
default
to osicbc
and cbcsolver
feature;osicbc
to build with Osi
supported. However the Osi
is always built, by which the Cbc
call the Clp
solver and Cgl
library;cbcsolver
to build CbcSolver
lib and crate the api for Rust
. If you do not use Cbc
directly, you can disable this feature to reduce the build time;The package build from the source and link statically by default. It also provide the following environment variables to allow users to link to system library customly:
CARGO_COINUTILS_STATIC
to link to CoinUtils statically;CARGO_COINUTILS_SYSTEM
to link to CoinUtils system library;CARGO_OSI_STATIC
to link to Osi statically;CARGO_OSI_SYSTEM
to link to Osi system library;CARGO_CLP_STATIC
to link to Clp statically if with_clp
feature is enabled;CARGO_CLP_SYSTEM
to link to Clp system library if with_clp
feature is enabled;CARGO_CGL_STATIC
to link to Cgl statically;CARGO_CGL_SYSTEM
to link to Cgl system library;Set the environment variable to 1
to enable the feature. For example, to link to system library dynamically, set CARGO_${LIB_NAME}_SYSTEM
to 1
; to link to system library statically, set both CARGO_${LIB_NAME}_SYSTEM
and CARGO_${LIB_NAME}_STATIC
to 1
.
On Windows, if ${LIB_NAME}_SYSTEM
is set to 1
, cbc-src
will use
[vcpkg] to find Cbc. Before building, you must have the correct Cbc
installed for your target triplet and kind of linking. For instance,
to link dynamically for the x86_64-pc-windows-msvc
toolchain, install
cbc
for the x64-windows
triplet:
sh
vcpkg install cbc --triplet x64-windows
To link Cbc statically, install cbc
for the x64-windows-static-md
triplet:
sh
vcpkg install cbc --triplet x64-windows-static-md
To link Cbc and C Runtime (CRT) statically, install cbc
for the x64-windows-static
triplet:
sh
vcpkg install cbc --triplet x64-windows-static
and build with +crt-static
option
RUSTFLAGS='-C target-feature=+crt-static' cargo build --target x86_64-pc-windows-msvc
Please see the "Static and dynamic C runtimes" in The Rust reference for detail.
you can compile it for the other target by providing the --target
option to
cargo build
.
| Target | supported |
|--------------------------------------|:-----------:|
| arm-unknown-linux-gnueabi
| ✓ |
| arm-unknown-linux-gnueabihf
| ✓ |
| armv7-linux-androideabi
| ✓ |
| armv7-unknown-linux-gnueabi
| ✓ |
| armv7-unknown-linux-gnueabihf
| ✓ |
| armv7-unknown-linux-musleabi
| ✓ |
| armv7-unknown-linux-musleabihf
| ✓ |
| riscv64gc-unknown-linux-gnu
| ✓ |
| x86_64-pc-windows-gnu
| ✓ |
| x86_64-unknown-linux-gnu
| ✓ |
Your contribution is highly appreciated. Do not hesitate to open an issue or a pull request. Note that any contribution submitted for inclusion in the project will be licensed according to the terms given in LICENSE.