5 个版本
0.2.2 | 2024年4月14日 |
---|---|
0.2.1 | 2024年4月14日 |
0.2.0 | 2024年4月14日 |
0.1.1 | 2024年4月7日 |
0.1.0 | 2024年4月7日 |
#715 in 数学
每月 98 次下载
16KB
Ipopt Bindgen
这个 crate 提供了使用 bindgen 对 Ipopt 优化库的 C 接口进行原始 Rust 绑定的功能。
快速开始
安装 Ipopt(更多详细信息请参阅先决条件部分)。
将此 crate 添加到您的 Cargo.toml
[dependencies]
ipopt_bindgen = "0.2"
在您的项目中使用 Ipopt C 接口
use ipopt_bindgen::*;
// Ipopt C interface symbols are now available.
println!("{0}.{1}.{2}", IPOPT_VERSION_MAJOR, IPOPT_VERSION_MINOR, IPOPT_VERSION_RELEASE);
或者,运行此仓库中的示例
cargo run --example hs071
支持
此 crate 目前已在以下环境中进行了测试
- 基于 Debian 的 Linux,从源代码安装了 Ipopt。
- Windows 11,从预编译的二进制文件中安装了 Ipopt,使用 MSVC。
- macOS Sonoma,从
homebrew
安装了 Ipopt。
为什么还需要另一个 Ipopt 绑定器?
Rust 已经有其他 crates 提供了 Ipopt 的绑定
那么为什么还要创建另一个呢?
此 crate 的目的是直接使用系统 Ipopt 安装,而不是在 cargo 中构建。这既有优点也有缺点,可能不适合您。
优点
- ✅ 完全自定义您的 Ipopt 构建,不受
cargo
或现有 crates 的约束。 - ✅ 项目可能具有更少的构建依赖项。
- ✅ 不绑定到特定的 Ipopt 版本(除非 C API 发生破坏性更改)。
缺点
- ❌ 需要系统安装的 Ipopt,这可能对您的项目来说不方便。
- ❌ 使用 C 接口,而不是功能更丰富的 C++ 接口。
如果您只是想开始在 Rust 中使用 Ipopt,您可能应该使用上述现有的某个 crate。但是,如果您已经在系统上安装了 Ipopt 或需要使用具有特定功能的构建,这个 crate 可能适合您。
理想情况下,一个符合 Rust 风格的 crate 应该建立在它之上,或者它可以集成到现有的 crate 中。
在示例目录中,有一个来自Ipopt文档的HS071问题的完整、镜像示例。再次强调,此crate的理想用途是被一个提供更自然接口的更高级crate消费,但它也可以直接使用。示例演示了C API的使用,这可能会在相关工作中提供帮助!
先决条件
Ipopt
Ipopt必须安装在你的系统上。绑定头文件将尝试包含coin-or/IpStdCInterface.h
。
在Linux上,你可以使用你的包管理器安装Ipopt,或者从源码构建它。默认情况下,这些过程应使Ipopt立即可用于与该crate一起使用。
在Windows上,你可以从Ipopt的GitHub仓库中获取预编译的二进制文件。然后,按照以下方式将下载的版本文件添加到你的环境变量中
- 将包含预编译二进制的目录添加到
PATH
。 - 将包含静态库的目录添加到
LIB
。 - 将包含Ipopt头文件的目录添加到
INCLUDE
。
在Windows上,默认情况下,此crate将尝试使用cc
crate来自动检测MSVC安装。这用于更轻松地为Ipopt C接口头文件提供标准库头文件。如果失败,你需要将INCLUDE
环境变量设置为包含你希望的标准库头文件。
Bindgen
必须也在你的系统上满足bindgen要求。这基本上意味着必须安装clang
。
在Windows上,你可以使用winget install LLVM.LLVM
。在Linux上,你可以使用你的包管理器安装clang
。LLVM还提供了一个apt
安装脚本。
更改
对这个项目所有有意义的更改都记录在更改日志中。
许可协议
此仓库的许可协议可以是以下之一
- Apache License,版本2.0(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT License(LICENSE-MIT或https://opensource.org/licenses/MIT)
由你选择。
Ipopt本身根据Eclipse Public License (EPL)版本2.0进行许可。
无运行时依赖
~0–1.8MB
~36K SLoC