1 个不稳定版本
0.1.0 | 2024年1月19日 |
---|
#2326 在 算法 中
8KB
Coinpopt-sys
coinipopt-sys 包是一个 *-sys 包。该包提供对 Ipopt 库的低级绑定。
通过此包,您无需担心在系统中安装 Ipopt,它是一个适用于 所有平台 的包。
Ipopt(Coin-or 线性规划)是一个开源的线性规划求解器。它主要用于作为可调用的库使用,但同时也提供了一个基本的、独立的可执行版本。
使用方法
只需将以下内容添加到您的 Cargo.toml
[dependencies]
coinipopt-sys = "0.2"
配置
以下 Cargo 功能受支持
default
到osiclp
和clpsolver
功能;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-features
的 ipopt-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