Linux上的Swift Objective-C互操作性,错误:找不到“Foundation / Foundation.h”文件

时间:2017-12-27 19:02:56

标签: objective-c swift linux swift-package-manager

我正在尝试编译一个swift程序,该程序在运行Linux的VM上使用Objective-C编写的代码(Ubuntu 16.0.4,Swift 4.0.3)。

编译时出现此错误:

fatal error: 'Foundation/Foundation.h' file not found
#import <Foundation/Foundation.h>
        ^
1 error generated.

在Mac OS上

相同的程序在Mac OS上完美运行。

我尝试了什么?

我已经尝试恢复到swift 3.1.1(我记得很久以前在swift 3上工作)。

我广泛搜索了这个问题,但没有成功。

我已经按照说明如何在Linux上安装Objective-C运行时并安装了GNUStep(参见http://www.techotopia.com/index.php/Installing_and_Using_GNUstep_and_Objective-C_on_Linux

一切都没有成功。

为什么我使用Objective-C?

(预见这个问题)。

我需要从程序中调用python脚本。 Python有一个C库,我只能用C或Objective-C。

事实上,注释掉行#import <Foundation/Foundation.h>会导致导入Python库时编译失败:

fatal error: 'Python/Python.h' file not found
#include <Python/Python.h>
         ^
1 error generated.

1 个答案:

答案 0 :(得分:2)

Linux上的Swift无法与Objective-C互操作,它可与C互操作。

根据  https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md#c-language-targets,您可以在单独的目标中将纯C代码作为程序包的一部分。

您也可以将您的包与C库链接,请参阅https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md#c-language-targets

在您的情况下,我将使用后面的方法,并将您的代码链接到Python C库。