Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift(linux)中链接C库及其支持库_Linux_Swift_Gsl - Fatal编程技术网

在Swift(linux)中链接C库及其支持库

在Swift(linux)中链接C库及其支持库,linux,swift,gsl,Linux,Swift,Gsl,我想在Swift中使用GNU科学库,特别是我想使用gsl_rng.h中的例程。因此,我基本上遵循(我使用的是Linux,而不是OSX) 我将模块创建为 module CGSL [system] { header "/usr/include/gsl/gsl_rng.h" link "gsl" export * } 然而,我无法构建我的程序,因为我收到了大量未定义的消息,这些消息引用了“cblas_dasum”。事实上,正如GSL的文件所述 要针对库进行链接,需要指定两个主库 以及一个

我想在Swift中使用GNU科学库,特别是我想使用gsl_rng.h中的例程。因此,我基本上遵循(我使用的是Linux,而不是OSX)

我将模块创建为

module CGSL [system] {
  header "/usr/include/gsl/gsl_rng.h"
  link "gsl"
  export *
}
然而,我无法构建我的程序,因为我收到了大量未定义的消息,这些消息引用了“cblas_dasum”。事实上,正如GSL的文件所述

要针对库进行链接,需要指定两个主库 以及一个支持CBLAS的库,该库提供标准的基本线性 代数子程序。中提供了合适的CBLAS实现 如果您的系统没有提供libgslcblas.a库,则该库为libgslcblas.a。这个 下面的示例演示如何将应用程序链接到库

$ gcc -L/usr/local/lib example.o -lgsl -lgslcblas -lm

如何链接
-lgsl
-lgslcblas

libgslcblas
添加第二个
链接
行将实现以下目的:

module CGSL [system] {
  header "/usr/include/gsl/gsl_rng.h"
  link "gsl"
  link "gslcblas"
  export *
}
您可能还需要添加
链接“m”
,即使我不必在我的设备上这样做(Ubuntu 14.04)

我没有在Swift文档中找到关于这一点的具体建议,不得不做出有根据的猜测,但它起了作用。Linux上的Swift正在开发中,软件包管理器仅适用于Swift 3.0开发快照,Swift 3.0是一种不稳定的、积极开发的最新版本的语言。这种常见场景没有很好的文档记录,这一事实应该让您了解该技术的成熟度

作为包管理器的替代品,您可能需要考虑使用桥接头,如对这个问题的回答所描述的:

无论采用哪种方式,更大的挑战将是从Swift调用GSL API,因为该API使用了大量非原语类型。为了解决这个问题,考虑编写一个C封装器,用一个简化的接口,可以很容易地从SWIFT调用。然后可以使用桥接头或系统模块调用包装器