您知道我如何设计gsl用来允许用户在各种cblas实现之间切换的相同概念吗?
当gsl自身构建时,应该将gsl所依赖的cblas依赖硬编码到gsl库中。
2.2.2与替代BLAS库连接 下面的命令行显示了如何将同一个应用程序链接到另一个CBLAS库libcblas.a, gcc例子。o -lgsl -lcblas -lm 为了获得最佳的性能,应该为-lcblas使用一个优化的特定于平台的CBLAS库。图书馆必须符合CBLAS标准。ATLAS包提供了一个带有CBLAS接口的便携式高性能BLAS库.它是免费的软件,应该安装任何工作需要快速矢量和矩阵操作。以下命令行将与ATLAS库及其CBLAS接口链接, gcc例子。o -lgsl -lcblas -latlas -lm 如果ATLAS库安装在非标准目录中,请使用-L选项将其添加到搜索路径中,如前所述。 有关BLAS函数的更多信息,请参见BLAS支持。
发布于 2016-08-06 09:55:49
Blas图书馆
gcc -c -Wall -Werror -fpic blas.cpp
gcc -shared -o libblas.so blas.oGSL库,实际上是使用blas,但我们没有链接到它。
gcc -c -Wall -Werror -fpic gsl.cpp
gcc -shared -o libgsl.so gsl.o同时链接到gsl和blas的示例应用程序。
gcc -Wall -o main main.cpp -L../mygsl -lgsl -L../mycblas -lblas发布于 2016-08-06 09:13:52
这里没有特殊的概念--只是实现相同API的多个库和具有相同ABI的库。
换句话说,您可以编写一个使用来自#include foo.h的函数#include foo.h的程序。Libfoo.so是一个导出符号int do_stuff(char*)的共享库对象,因为它是从包含int do_stuff(char*)实现的程序生成的。
如果您现在编写了第二个库来实现与libfoo相同的所有符号,那么您就可以在libfoo的位置上使用它了。
这里所发生的一切就是这样。GSL使用BLAS符号。BLAS确切地定义了这些符号是什么(读:它们的C函数签名),所以您可以使用任何您想要的BLAS实现。(假设所有这些都是用兼容的编译器/链接器构建的)
https://stackoverflow.com/questions/38802521
复制相似问题