#coin-or #linear-programming #link #solver #osi #src #clp

sys clp-src

将Coin-OR Clp作为crate重新分发

8个版本

新版本 0.2.8+1.17.10 2024年8月20日
0.2.7+1.17.9 2024年4月11日
0.2.6+1.17.9 2023年10月27日
0.2.4+1.17.8 2023年5月18日
0.2.2+1.17.7 2023年3月28日

#2349 in 算法

40 个月下载量
用于 6 个crate (3 个直接使用)

Apache-2.0

6.5MB
167K SLoC

C++ 166K SLoC // 0.1% comments Automake 236 SLoC // 0.2% comments Rust 102 SLoC Shell 11 SLoC // 0.3% comments

Clp-src

Package Documentation License

Clp-src crate是一个*-src crate。它通过cargo将Clp库链接到可执行文件,但不提供Rust绑定。Clp使用CoinUtils (CoinUtils-src)、Osi (Osi-src)(可选)构建。

通过这个包,你无需担心在系统中安装Clp,它是一个多平台包。

Clp(Coin-or线性规划)是一个开源的线性规划求解器。它主要用于作为可调用的库,但也提供了一个基本的、独立的可执行版本。

用法

  1. 在你的Cargo.toml中添加以下内容

    [dependencies]
    clp-src = "\*"
    
  2. 在你的lib.rs中添加以下内容

    extern crate clp_src;
    

此包不提供绑定。请使用coincbc-syscoinclp-sys来使用Cbc、Clp等。

[dependencies]
coinclp-sys = { version = "\*" }

配置

功能

以下Cargo功能受到支持

  • default用于构建带有osiclpclpsolver功能的软件包;
  • osiclp用于构建支持Osi的软件包;
  • clpsolver用于构建ClpSolver库并为Rust创建API。如果您不直接使用Clp,您可以禁用此功能以减少构建时间;

环境

默认情况下,该软件包从源代码构建并静态链接。它还提供了以下环境变量,允许用户自定义链接到系统库

  • CARGO_COINUTILS_STATIC用于静态链接到CoinUtils;
  • CARGO_COINUTILS_SYSTEM 用于链接 CoinUtils 系统库;
  • CARGO_OSI_STATIC 用于静态链接 Osi,如果启用了 with_osi 功能;
  • CARGO_OSI_SYSTEM 用于链接 Osi 系统库,如果启用了 with_osi 功能;
  • CARGO_CLP_STATIC 用于静态链接 Clp;
  • CARGO_CLP_SYSTEM 用于链接 Clp 系统库;

将环境变量设置为 1 以启用功能。例如,要动态链接系统库,将 CARGO_${LIB_NAME}_SYSTEM 设置为 1;要静态链接系统库,将 CARGO_${LIB_NAME}_SYSTEMCARGO_${LIB_NAME}_STATIC 都设置为 1

Windows 和 vcpkg

在 Windows 上,如果 CARGO_${LIB_NAME}_SYSTEM 设置为 1clp-src 将使用 vcpkg 查找 Clp。在构建之前,您必须为您的目标三元组和链接类型安装正确的 Clp。例如,为 x86_64-pc-windows-msvc 工具链动态链接,安装 clpx64-windows 三元组

vcpkg install clp --triplet x64-windows

要静态链接 Clp,为 x64-windows-static-md 三元组安装 clp

vcpkg install clp --triplet x64-windows-static-md

要静态链接 Clp 和 C 运行时 (CRT),为 x64-windows-static 三元组安装 clp

vcpkg install clp --triplet x64-windows-static

并使用 +crt-static 选项进行构建

RUSTFLAGS='-C target-feature=+crt-static' cargo build --target x86_64-pc-windows-msvc

有关详细信息,请参阅 Rust 参考“静态和动态 C 运行时”

交叉编译

您可以通过向 --target 选项提供 cargo build 提供其他目标的编译。

目标 支持的
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
armv7-unknown-linux-gnueabi
armv7-unknown-linux-gnueabihf
armv7-unknown-linux-musleabi
armv7-unknown-linux-musleabihf
aarch64-unknown-linux-gnu
aarch64-unknown-linux-musl
riscv64gc-unknown-linux-gnu
x86_64-pc-windows-msvc
x86_64-unknown-linux-gnu
x86_64-unknown-linux-musl
其他 未测试

贡献

您的贡献非常受重视。不要犹豫,可以提出问题或拉取请求。请注意,任何提交给项目以供包含的贡献都将根据在 LICENSE 中给出的条款进行许可。

依赖项

~2.5MB
~69K SLoC