ansi C程序中的直方图功能:GSL和/或其他?

时间:2011-12-06 02:07:29

标签: c histogram gsl

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

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

2 个答案:

答案 0 :(得分:3)

仅仅复制标题gsl_histogram.h是不够的。标头仅表示此库公开的接口。您还需要复制像*.so*.a文件这样的二进制文件,但很难分辨哪些文件要复制。所以我认为你最好将它安装在你的机器上。这很简单,只需使用此tutorial来查找和安装GSL包。

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

答案 1 :(得分:1)

您无法从操作系统中复制库,并希望它们能够保持不变。

OS X使用Mach-O目标文件格式,而现代Linux系统使用ELF目标文件格式。通常的ld.so(8)链接器/加载器将不知道如何加载Mach-O格式的目标文件以便执行可执行文件。所以你需要Apple提供的ld.so(8) - 或者他们称之为装载机的任何东西。 (已经有一段时间了。)

此外,OS X中的目标文件将与Apple提供的libc链接,并需要Apple提供的库中的相应符号。您还需要在Linux系统上提供Apple提供的libc。此C库将尝试使用OS X系统调用号调用约定进行系统调用。我保证系统调用号码已经改变,几乎可以肯定调用约定也不同。

虽然Linux内核的binfmt_misc通用对象加载器可用于教会内核如何加载不同的目标文件格式,而内核的personality(2)系统调用可用于在不同的调用约定之间进行选择,系统调用号码,等等,完成这项工作所需的工作量是巨大的:WINE Project自1993年以来一直致力于解决这个问题(但使用Windows格式的COFF和支持库)。

运行会更容易:

apt-get install libgs0-dev

或者您选择的分配上的等价物。如果您的发行版不能轻松获得,那么手动编译和安装库仍然会更容易,而不是试图让OS X版本工作。