GLPK/Linux 操作系统
此页面介绍如何在 Linux 操作系统上构建和安装 GLPK。Linux 上的标准编译器套件是 GCC。尽管如此,也可以安装和使用其他编译器。
预打包选项:作为一个 替代方案,GLPK 也可能作为 Debian(Ubuntu 使用)或 RPM(Fedora 使用)包提供。安装包比编译更方便,但包往往比发布版滞后一到多个版本。手动编译还可以让你自定义构建配置,使生成的库更好地匹配你的环境和需求。
因此,鼓励新用户从源代码构建 GLPK。如果你需要帮助,可以随时从help-glpk邮件列表获取帮助。
下表显示了与 Linux 相关的关键 GLPK 文件
文件 | 角色 | 默认值 | 文件 |
---|---|---|---|
glpsol | 命令行求解器 | /usr/local/bin | 可执行文件 |
glpk.h | GLPK API 头文件 | /usr/local/include | C 语言头文件 |
libglpk.a | 静态库 | /usr/local/lib | 常规存档文件 |
libglpk.so | 共享库 | /usr/local/lib | 指向共享对象文件的符号链接 |
注意:如果 GLPK 作为 Linux 包 添加,则会从指示的路径中省略“/local” 部分。
警告:API 用户不应该包含除glpk.h.
显示的路径详细信息假设正常的构建和安装。静态库用于编译时链接,共享库用于运行时链接。根据 GLPK 的配置方式,两者可能并不存在。用户有时会遇到文件位置和搜索路径的问题——如果是这样,下面给出了一些故障排除提示。GLPK 使用的位置符合Linux 文件系统层次结构标准。
以下说明指的是
- 从 GLPK 版本 4.42 到 4.65 的代表性升级。
请注意
- 如果你正在进行全新安装,请跳过与 4.42 相关的任何说明
- 对于更高版本的版本,4.65 应该用相关版本号替换。
为了编译,需要 gcc。 GCC 是 GNU 编译器集合。该集合包含一个 C 语言 编译器。你可以使用以下命令检查已安装的版本
$ gcc --version
使用 ODBC 需要以下任一软件包:iODBC或unixODBC软件包。
默认安装路径为/usr/local。在 Fedora 派生的发行版(Fedora、Red Hat、Centos、...)上/usr/local/lib默认情况下不在库搜索路径中。你可以使用以下命令添加路径
$ sudo su # echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf # /sbin/ldconfig # exit
将 GLPK 4.65 压缩包下载到用户空间中的目录(如果你已经有了,请跳过此步骤)
$ wget ftp://ftp.gnu.org/gnu/glpk/glpk-4.65.tar.gz $ wget ftp://ftp.gnu.org/gnu/glpk/glpk-4.65.tar.gz.sig
验证压缩包
$ gpg --verify glpk-4.65.tar.gz.sig glpk-4.65.tar.gz
如果你的密钥环中缺少密钥,可以使用以下命令安装它
$ gpg --recv-keys 5981E818
然后解压缩压缩包
$ tar -xzvf glpk-4.65.tar.gz $ cd glpk-4.65
应用任何后续的 补丁——很少需要,因为重要的错误修复通常会触发新的发布。
寻找 PDF 文档(或者切换到子目录doc并查找)
$ find . -name "*.pdf" -print
强烈建议你在继续之前熟悉“在您的计算机上安装 GLPK”,该文档位于doc/glpk.pdf中。你可以使用以下命令查看它
$ evince doc/glpk.pdf &
或者,类似的信息以文本形式提供
$ less INSTALL # q to quit
接下来确定你要使用哪些配置选项。例如,对 ODBC(开放数据库连接)的支持允许 MathProg 与关系数据库和电子表格交互。列出选项(less管道提供滚动,按q退出)
$ ./configure --help | less
使用你的系统包管理器安装任何依赖的 Linux 包。例如,ODBC 需要存在相应的 ODBC dev(开发人员)头文件包。
现在配置 GLPK。默认情况下,GLPK 构建库的静态版本和共享版本。常见的选项包括(你只需要其中一个命令)
$ ./configure # default $ ./configure --enable-dl --enable-odbc # for ODBC support with dynamic linking to ODBC library $ ./configure --disable-shared # prevent GLPK shared library
配置选项--enable-dl不会指示 GLPK 构建共享库,而是告诉 GLPK 动态链接其支持库。
如果你需要设置环境变量,请在任何配置选项后的配置命令行上设置——使用--help了解更多详情。
不要使用包含空格字符的路径,因为这些路径不受automake.[1]
支持
编译[编辑 | 编辑源代码]现在编译并检查 GLPK。该make选项--jobs=4
$ make --jobs=4 $ make check OPTIMAL LP SOLUTION FOUND
允许在多核硬件上并行处理——在单核(较旧)机器上或遇到错误消息时,应省略它。根据你的 CPU 性能,编译步骤可能需要 15 秒到几分钟。
$ examples/glpsol --version GLPSOL: GLPK LP/MIP Solver, v4.65
检查本地 GLPSOL 版本
安装系统安装使 GLPK 对所有用户普遍可用,但需要sudo 权限。系统安装是可选的,可以省略。
$ tar -xzvf glpk-4.65.tar.gz $ cd glpk-4.65 $ ./configure $ sudo make uninstall
卸载 GLPK 4.65(如果有)(步骤一和三可能没有必要)
卸载以前版本的 GLPK 并不是严格必要的,但这是一个好习惯。
$ sudo make install Libraries have been installed in: /usr/local/lib
安装 GLPK 4.65
$ ls -lF /usr/local/lib/libglpk.a $ ls -lF /usr/local/lib/libglpk.so
检查预期文件是否存在
$ which glpsol /usr/local/bin/glpsol
检查 GLPSOL 是否普遍可用
$ sudo ldconfig --verbose
更新运行时链接器缓存(可能没有必要)
收尾$ make clean # the Makefile remains, unlike distclean
最后,清理 GLPK 4.65 源代码目录
$ cd ~/glpk $ rm -fr glpk-4.65
并根据需要删除过时的分支(如果存在,原始的 GLPK 4.65 压缩包将保留)
源代码包含更多关于构建过程的信息,包括一些有用的配置选项
$ less INSTALL # q to quit
在 x86 架构上使用 GCC 编译 GLPK 时,使用选项编译可以提高 20% 的性能-mfpmath=both。这需要启用 SSE。这是 x86-64 编译器的默认设置。对于 32 位编译器,SSE 必须通过以下任一方式启用-march=<cpu-type>, -msse,或-msse2.
-mfpmath=both允许使用 FPU 和 SSE 寄存器。参见 http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/i386-and-x86_002d64-Options.html
示例
$ export CFLAGS="-march=native -O3 -pipe -mfpmath=both" $ ./configure --enable-dl --enable-mysql --enable-odbc $ make -j8 $ make check $ sudo make install $ sudo ldconfig
- -march=native意味着该代码可能无法在不同的 CPU 上使用。
- -pipe通过使用管道而不是文件来减少编译时间
- -j8通过并行化减少编译时间,假设有 8 个核心
要查找系统上的关键 GLPK 文件,请尝试
$ find -P /usr -name "*glpk.*" \( -type f -o -type l \) -exec file '{}' \; 2>/dev/null
要检查当前搜索路径,请尝试
$ printenv | grep PATH
以上两个调用都是被动的,不会改变你的系统。
您可能需要显式更新运行时链接器缓存
$ sudo ldconfig --verbose
- ↑ "Re: Automake's invokation of libtool doesnt handle $prefix with spaces in directory names". Free Software Foundation. Retrieved 10 May 2012.