2

私は、Objective-CアプリケーションをC++ライブラリにリンクする方法についてたくさんの情報を見てきましたが、逆もできますか?C++ LinuxターゲットアプリケーションをObjective-C静的ライブラリにリンクできますか?

私のパートナーと私は完全にObjective-Cを使ってiPhoneアプリケーションを開発しています。プロジェクトの途中で、新しい機能を追加することにしました。この機能はプッシュ通知を必要とするため、Linuxボックスで実行されるサーバーサイドアプリケーションを記述する必要があります。このサーバーアプリケーションは、Objective-Cで書かれたコードのほとんど(実際には)にアクセスする必要があります。 2つの選択肢があると思います.C/C++ですべてを書き直すか、LinuxでObjective-Cコードを再コンパイルします。書き換えには時間がかかりすぎるので、2番目のルートを取りたいと思います。

私はGCCとGNUstepを使って、Linuxサーバアプリケーションに必要なObjective-Cクラスを静的ライブラリにコンパイルしました。実際のサーバーアプリケーションをC++で記述したいのですが、Objective-Cライブラリにそのアプリケーションをリンクする必要があります。それはできますか?どうやって?

もしそうでなければ、誰も私にこのことについてどうやって行くか考えてもらえますか?

+0

私はあなたが基本的に '.m'ファイルに呼び出しを入れ、そこに定義したC関数を呼び出す必要があると思いますか? –

+0

@ MichaelKrelin-hacker多分あなたは '.mm'を意味していましたか?いずれにしても、サーバーサイドのLinuxアプリケーション用のすべてのソースファイルはGCCのObjective-Cフロントエンドでコンパイルする必要がありますか?私のファイル 'something.cpp'の名前をObjective-Cライブラリ(' -lMyObjCLib')にリンクできませんか? –

+0

'.m'はすべきです。そして、いいえ、 '.c'や' .cc'(または '.cpp')ファイルから' .m'ファイルで定義されたプレーンな 'c'関数を呼び出すことができると思います。これは '.m 'でなければならないインターフェース部分です。 –

答えて

2

LinuxボックスのGccは、Objective-CをNSStringNSArrayのような標準的な基盤クラスとともにコンパイルできるはずです。 gccのフロントエンドにはapt-getが必要な場合があります。あるいは、LLVMをうまく使うこともできます。

共有ライブラリのコードでAppleライブラリを使用していない限り、Linuxでコンパイルするとよいでしょう。

Objective-C機能をCまたはC++アプリケーションから呼び出す場合は、Objective-C機能をC関数にラップする必要があります。私はこのSOの質問への私の答えにそれに関するいくつかのガイダンスを提供しました:is there any way to use Objective-C library in C?

EDIT(コメントの質問に答えるために)

ラッパー関数は、.Mファイルである必要はあり、それはまだだけでObjective-Cのコードが含まれておりますようObjective-Cのコンパイラでコンパイルしますプレーン.Cの機能を公開します。 C API C++コード用のラッパーは、依然としてextern "C"関数が定義されているだけで、C++コードである必要があります。 Objective-Cで、あなたは何extern "C"を必要としないのObjective-Cは、まだCであると - 同じリンケージなど

あなたはGCC準拠のコンパイラで簡単な-lフラグと結果のライブラリを使用することができます。

アップルのライブラリでは、NSFoundation.h(具体的なiPhoneライブラリ - のココアタッチなど)以上のものを意味します。

NSFoundation.hは、Objective-Cパッケージ/ GNUStepによって確実に提供されています。

+0

ありがとう、それは私が必要とするものであるように思えます。しかし、私はいくつかの詳細が必要だと思う。ラッパー関数の実装を含むソースファイルは、**。m **でなければなりません。 Objective-C静的ライブラリとしてGCC/Linuxでコンパイルされていますか?次に、私のC/C++アプリケーションはどのようにそのlibにリンクしますか?通常の '-l'リンカオプション?また、 "Apple libraries"では** Foundation.h **などを意味しますか?もう一度ありがとう、私は少し失われていましたが、私はこれがどのように行われるかを見始めています。 –

+0

@DaniloCarvalho - あなたの質問を反映するために私の答えを更新しました。あなたが好きなら、アップホートして答えを受け入れるのを忘れないでください。 – Krizz

+0

素晴らしい!私はそれを試してみましょう、それは動作するはずですので、私には多くの意味があります。どうもありがとうございます。 –

関連する問題