Swift Objective-C interoperability on Linux, error: 'Foundation/Foundation.h' file not found

Swift Objective-C interoperability on Linux, error: 'Foundation/Foundation.h' file not found

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

编译时出现这个错误:

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

上MacOS

相同的程序在 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。

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

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

Swift on Linux 不能与 Objective-C 互操作,它可以与 C.

互操作

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

您还可以 link 您的包带有 C 库,请参阅 https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md#c-language-targets

在你的情况下,我会使用后一种方法,并将 link 你的代码与 Python C 库一起使用。