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

在Swift(linux)中链接C库及其支持库,第1张

概述我想在 Swift中使用GNU科学库,特别是我想使用gsl_rng.h中的例程.所以我基本上遵循 https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md(我使用Linux,而不是OS X) 我创建模块为 module CGSL [system] { header "/us 我想在 Swift中使用GNU科学库,特别是我想使用gsl_rng.h中的例程.所以我基本上遵循 https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md(我使用linux,而不是OS X)

我创建模块为

module CGSL [system] {  header "/usr/include/gsl/gsl_rng.h"  link "gsl"  export *}

但是,我无法构建我的程序,因为我收到了很多关于’cblas_dasum’的未定义引用的消息.事实上,正如GSL的文档所述

To link against the library you need to specify both the main library
and a supporting CBLAS library,which provIDes standard basic linear
algebra subroutines. A suitable CBLAS implementation is provIDed in
the library libgslcblas.a if your system does not provIDe one. The
following example shows how to link an application with the library,

06001

我该怎么做才能链接-lgsl和-lgslcblas?

为libgslcblas添加第二个链接线就可以了:
module CGSL [system] {  header "/usr/include/gsl/gsl_rng.h"  link "gsl"  link "gslcblas"  export *}

您可能还需要添加链接“m”,即使我不必在我的框中执行此 *** 作(Ubuntu 14.04).

我没有在Swift文档中找到关于此的具体建议,并且必须做出有根据的猜测,但它有效. Swift on linux正在进行中,而Package Manager仅适用于Swift 3.0开发快照,Swift 3.0是一个不稳定的,积极开发的最新版本的语言.这种常见情况没有得到很好的记录,这一事实可以让您了解技术的成熟度.

作为软件包管理器的替代方案,您可能需要考虑使用桥接标头,如此问题的答案中所述:
Compile C code and expose it to Swift under Linux.

无论您采用哪种方式,更大的挑战都是从Swift调用GSL API,因为API使用了许多非基本类型.要解决这个问题,可以考虑编写一个带有简化接口的C包装器,可以从Swift轻松调用.然后可以使用桥接头或系统模块调用包装器.

总结

以上是内存溢出为你收集整理的在Swift(linux)中链接C库及其支持库全部内容,希望文章能够帮你解决在Swift(linux)中链接C库及其支持库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1037224.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存