过去的一天,我一直在on骨头,却找不到解决方案。
我正在为cfitsio创建一个快速包装器,这是天文学家的合适格式:
https://heasarc.gsfc.nasa.gov/fitsio/
我已经创建了一个基本的swift包装器,以下面的教程作为模块,以cFitsIO
的形式访问上述内容:
https://www.hackingwithswift.com/articles/87/how-to-wrap-a-c-library-in-swift
当我在包装程序的main.swift
文件上快速运行时,可以看到导入成功,但是其中一个功能fits_open_file
无法解析。我之所以说导入有效,是因为swift提出了另一个在c库中提供的功能作为替代。
cfitsio页面上说只包含fitsio.h
,所以我希望从那里可以调用所有函数。
但是,在克隆GitHub并执行某些grep时,我找不到fits_open_file
函数的任何签名。
还有一件事情,当我创建快速包装器时,我使用了pig-config --type system-module
,因为我还可以通过brew下载cfitsio,并将其放入我的系统/usr/local/include
文件夹中。
我在以下链接中读到其他有关Xcode不能正确找到嵌套标头的信息,但是fitsio有很多标头文件,有些带有常量,有些带有宏等。我希望这样做更简洁,而不是单调乏味仔细检查每个头文件应具有的内容?
https://medium.com/shopify-mobile/wrapping-a-c-library-in-swift-part-1-6dd240070cef
答案 0 :(得分:1)
在快速浏览了您所引用的nasa.gov网站上提供的源代码之后,您可以看到fits_open_file
实际上是longnam.h
中定义为对{{1}的调用的宏。 }。 ffopentest
标头包含在longnam.h
中,因此,如果在C / C ++代码中使用了该宏,则该宏将可用。
问题在于,Swift仅自动导入简单的,类似于常量的宏,请参阅此Apple文档:https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/using_imported_c_macros_in_swift。
以下是相关的SO帖子:Accessing C macros in Swift