#线性规划 #ipopt #coin-or #ipopt-sys

sys coinipopt-sys

COIN-OR Clp 库的低级绑定

1 个不稳定版本

0.1.0 2024年1月19日

#2326算法

Apache-2.0

8KB

Coinpopt-sys

Package Documentation License

coinipopt-sys 包是一个 *-sys 包。该包提供对 Ipopt 库的低级绑定。

通过此包,您无需担心在系统中安装 Ipopt,它是一个适用于 所有平台 的包。

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

使用方法

只需将以下内容添加到您的 Cargo.toml

[dependencies]
coinipopt-sys = "0.2"

配置

以下 Cargo 功能受支持

  • defaultosiclpclpsolver 功能;
  • osiclp 用于构建支持 Osi 的版本;
  • clpsolver 用于构建 ClpSolver 库并为 Rust 创建 API。如果您不直接使用 Clp,则可以禁用此功能以减少构建时间;

默认情况下,包会构建和链接静态库。它还提供以下环境变量以允许用户自定义链接系统库:

  • CARGO_IPOPT_STATIC 用于静态链接 Ipopt;
  • CARGO_IPOPT_SYSTEM 用于链接系统库;

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

您还可以使用带有 no-default-featuresipopt-sys,并在 Cargo.toml 中添加 ipopt-src,启用 ipopt-src 定义的关联功能。请参阅 Ipopt-src

Windows 和 vcpkg

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

vcpkg install ipopt --triplet x64-windows

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

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

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

vcpkg install ipopt --triplet x64-windows-static

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

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

请参阅Rust参考中的“静态和动态C运行时”以获取详细信息。

交叉编译

由于 [openblas-src] 的问题 #101,我们无法使用 openblas-static 功能交叉编译此包。因此,如果您想交叉编译此包,可以使用 mike-kfed

将其添加到您的 project/.cargo/config.toml 中。

[patch.crates-io]
openblas-src = { git = "https://github.com/mike-kfed/openblas-src.git", branch = "arm-cross-compile" }

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

目标 支持
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-msvc
x86_64-unknown-linux-gnu

贡献

非常感谢您的贡献。请随时打开一个问题或拉取请求。请注意,提交给项目的任何贡献都将根据在 LICENSE 中给出的条款进行许可。

依赖关系

~2.2–4MB
~96K SLoC