2017-12-27 10 views
0

Linuxを実行しているVMでObjective-Cで書かれたコードを使用するスワップ・プログラムをコンパイルしようとしています(Ubuntu 16.0.4 、Swift 4.0.3)。Linux上でのSwift Objective-Cの相互運用性、エラー: 'Foundation/Foundation.h'ファイルが見つかりません。

コンパイルするとき、私はこのエラーを取得:

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

同じプログラムは、Mac OS上で完璧に動作

Mac OSで。

私は何を試しましたか?

私はスイフト3.1.1に復帰しようとしました(これは以前のスイフト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ライブラリをインポートするときにコンパイルが失敗します:Linux上

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

あなたの基盤とPythonフレームワークのコピーは、システムヘッダパスにないようです。 –

+0

@JoshCaswell、ありがとうございます。これをどのように確認できますか? – kmn

答えて

2

スウィフトは、それがよるC.

との相互運用性があり、Objective-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ライブラリにリンクします。

関連する問題