1

如果我只想使用gsl_histogram.hGnu Scientific Library (GSL) 中的库,我可以将它从安装了 GSL 的现有机器 (Mac OS Snow Leopard) 复制到未安装 GSL 的另一台机器 (Linux CentOS 5.7) ,并且只#include <gls_histogram.h>在我的 c 程序中使用一个语句?这行得通吗?

或者,即使我只需要这个库,我是否必须在 Linux 机器上完成 GSL 的完整安装?

4

2 回答 2

3

仅仅复制一个标题gsl_histogram.h是不够的。标头仅说明此库公开的接口。您还需要复制二进制文件,例如*.so*.a文件,但很难分辨要复制哪些文件。所以我认为你最好把它安装在你的机器上。这很简单,只需使用本教程查找并安装 GSL 包。

所以肯定有很多图书馆。然而,特别的是 Gnuplot。使用它你甚至不需要编译代码,但是你需要阅读一些文档。但幸运的是,已经有一个关于如何在 Stackoverflow 上使用 Gnuplot 绘制直方图的问题:Histogram using gnuplot? 值得注意的是,Gnuplot 实际上是一个非常强大的工具,所以花时间阅读它的文档肯定会得到回报。

于 2011-12-06T02:09:22.447 回答
1

您不能从操作系统复制库并期望它们保持不变。

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 版本工作更容易。

于 2011-12-06T02:21:24.697 回答