如果我只想使用gsl_histogram.h
Gnu Scientific Library (GSL) 中的库,我可以将它从安装了 GSL 的现有机器 (Mac OS Snow Leopard) 复制到未安装 GSL 的另一台机器 (Linux CentOS 5.7) ,并且只#include <gls_histogram.h>
在我的 c 程序中使用一个语句?这行得通吗?
或者,即使我只需要这个库,我是否必须在 Linux 机器上完成 GSL 的完整安装?
仅仅复制一个标题gsl_histogram.h
是不够的。标头仅说明此库公开的接口。您还需要复制二进制文件,例如*.so
和*.a
文件,但很难分辨要复制哪些文件。所以我认为你最好把它安装在你的机器上。这很简单,只需使用本教程查找并安装 GSL 包。
所以肯定有很多图书馆。然而,特别的是 Gnuplot。使用它你甚至不需要编译代码,但是你需要阅读一些文档。但幸运的是,已经有一个关于如何在 Stackoverflow 上使用 Gnuplot 绘制直方图的问题:Histogram using gnuplot? 值得注意的是,Gnuplot 实际上是一个非常强大的工具,所以花时间阅读它的文档肯定会得到回报。
您不能从操作系统复制库并期望它们保持不变。
OS X 使用Mach-O目标文件格式,而现代 Linux 系统使用ELF目标文件格式。通常的ld.so(8)
链接器/加载器不知道如何加载 Mach-O 格式的目标文件以供可执行文件执行。所以你需要苹果提供的ld.so(8)
——或者他们称之为装载机的任何东西。(有一阵子了。)
此外,来自 OS X 的目标文件将与 Apple 提供的 链接libc
,并需要 Apple 提供的库中的相应符号。您还需要libc
在 Linux 系统上提供 Apple 提供的内容。这个 C 库将尝试使用 OS X 系统调用号和调用约定进行系统调用。我保证系统调用号已经改变,几乎可以肯定调用约定是不同的。
虽然 Linux 内核的binfmt_misc
通用对象加载器可用于教内核如何加载不同的对象文件格式,并且内核的personality(2)
系统调用可用于在不同的调用约定、系统调用号等之间进行选择,但所需的工作量完成这项工作简直是巨大的:自 1993 年以来, WINE 项目一直在研究这个问题(但使用 Windows 格式的 COFF 和支持库)。
运行起来会更容易:
apt-get install libgs0-dev
或您选择的分配中的任何等效项。如果您的发行版不能轻松获得,手动编译和安装库仍然比尝试使 OS X 版本工作更容易。