2011-10-26 10 views
2

C++で書かれたWindowsアプリケーションがあります。その一部はMac OS Xに移植しようとしています。私たちの目標は、ビジネスロジックをいくつかのライブラリにラップし、コントローラーとGUIのトップ。おそらく、同じライブラリを使用しているいくつかの小さなアプリケーションを持っているので、最初の考えはC++コード用の動的ライブラリを使用することでした(より良い方法がない限り)。 しかし、これを達成するにはいくつか問題があります。私たちのダイナミックライブラリはうまくいきます(少なくともそのように見えます)、私たちのアプリケーションにリンクしている.dylibファイルがあります。問題は、私たちのアプリが単に私たちが含めることを試みている.hファイルを見つけることができないということです。 .hファイルがエクスポートされていることと、インストール名がチェックされていること、およびライブラリが正しいディレクトリにあることを確認していることは既に確認済みです。また、ダイナミックライブラリを作成して使用するためのAppleのガイドに従っており、私たちが欠けていた特別なステップも見つからなかった。ここOS Xでダイナミックライブラリを作成して使用する

私の質問は二つの部分である:

  1. は、我々が何かする前に試してみてくださいインタフェース(すなわち.hファイル)を露出に尽力している欠けているかもしれないいくつかの明白なステップはありますか?
  2. このプロジェクトで継承した厄介なC++コードには、障害がある可能性があります。たとえば、.hファイルに直接書き込まれたロジック(メソッドの実装)が多くあり、場合によっては対応する.cppファイルもまったく存在しません。したがって、.hファイルは単なるインタフェースの記述ではありません。私たちのアプリはライブラリから.hファイルを見つけることさえできないので、これは(厳粛な)問題ではないかもしれません。 移植が必要なコードベースが本当に大きく、いつものように締め切りが近いので、たくさんのコードを書き直すことは避けてください。

PS:これまでXcode 4.2で作業していただけで、まだコマンドラインツールを試していません。

+1

プロジェクト/ターゲットのビルド設定で、ライブラリのインクルードファイルへのパスを指定していることを確認してください。ヘッダー検索パスまたはユーザーヘッダー検索パス。 –

+0

ヘッダーファイルが(ファイルシステム内で)期待される場所にあることを確認してください。 – arne

+0

実際にはこれは純粋な絶望から成し遂げられました。しかし、これは本当に必要ですか?つまり、ライブラリを配布するときには、ヘッダーファイルも配布する必要があります。したがって、.dylibは完全に自己完結型であるWindowsの.dllファイルと同様に動作しません。 – pajevic

答えて

1

この場合、オプション1

、私はXcodeでヘッダやライブラリの探索パスにヘッダを含むディレクトリを追加します。レイアウトによっては、いくつかの方法が他の方法より優れています。あなたは、ライブラリに正しい依存している1

  • HEADER_SEARCH_PATHS
  • LIBRARY_SEARCH_PATHS
  • USER_HEADER_SEARCH_PATHS
  • またはFRAMEWORK_SEARCH_PATHS

一般的に、あなたはいくつかの組み合わせを使用しますこれらのオプションは、リンカー)。検出パスを定義するときに、接尾辞**を追加して再帰的な検索を示すことができます。

xcプロジェクトをvsソリューションと同期させるのに苦労することが少ないので、これは理想的です。一部の人々は実際にいくつかのドラッグが好きで、その含みのサポートをドロップ

オプション2

...私にはありませんが、検索パスに追加として、あなただけのような単純な何かを行うことはできませんので、多くの混乱がある場合、これはアプローチです:

  • プロジェクト
  • 追加する必要がヘッダを追加でコピーヘッダーのヘッダーは、更新をマージ/プルするときにビルドされ、破損の準備ができるまで、ターゲットのフェーズを作成して
  • を繰り返します。

すぐに厄介になり、ヘッダー名に衝突があった場合にライブラリを再利用する場合には、時間がかかります。

+0

こことあなたのコメントの両方で答えをありがとう。 – pajevic

+0

@NobleKあなたは歓迎されています。 – justin

関連する問題