2010-11-24 11 views
4

Symbianアプリケーション用のQtを開発中です。特定のS60バージョンでのみ利用可能な特定のプラットフォーム固有のAPIを使用する必要があります。たとえば、次のようにSymbian用マルチプラットフォームQtアプリケーションのコンパイル

-S60第3版FP1のLIBS: S60_common_lib、S60_3rd_ed_lib

-S60第3版FP2のLIBS: S60_common_lib、S60_3rd_ed_lib、Symbian_common_lib

-S60第5版のLIBS: S60_common_lib 、S60_5th_ed_lib、Symbian_common_lib

-Symbian^3 libs: S60_5th_ed_lib、Symbian3_lib、Sy mbian_common_lib

ご覧のとおり、特定のライブラリは複数のプラットフォームで共有されています。現在、すべての異なるS60プラットフォーム用に別々の.exe、リソースなどを取得するために、プロジェクト全体を複数回コンパイルする必要があります。私はproファイル内の各プラットフォームの識別子を定義することでこれをやっています。たとえば:

# symbian 3 
DEFINES += symbian_3_build 
symbian:LIBS += # ... 
# S60 3.1 
# DEFINES += s60_fp1 
# LIBS... 

そして、実際のコードでは、私のようなものがあります:

#ifdef symbian_3_build 
    #include <some_s3_header.h> 
#elseif s60_fp1 
    #include <some_fp1_header.h> 
#endif 

だから私の質問は以下のとおりです。

  1. これはシンビアンのアプリケーションのためのマルチプラットフォームのQtをコンパイルする唯一の方法です(例えば、1つのexeだけで動作させる方法はありますか?)

  2. 私はQtクリエイターを使用しています。 1つのプラットフォーム用にコンパイルした後、次のプラットフォームにコンパイルする前に、リソースファイル(.exe、.rsc、_reg.rsc)をepocフォルダからコピーします(古いファイルを上書きする)。すべてのバージョンがコンパイルされ、特定の場所に収集されたら、プラットフォームに基づいて異なるバージョンをインストールする単一のsisファイルを作成します。このプロセスはエラーが発生しやすくなります。これを行うための良い方法はありますか?

ありがとう。

答えて

3

これは、Symbianアプリケーション用のマルチプラットフォームQtをコンパイルする唯一の方法です(たとえば、1つのexeだけで動作させる方法はありますか)。

本当にあなたの設定の最大の共通点が何であるかによって異なります。

少なくとも、設定ごとに.proファイルを変更する必要はありません。 qmakeコマンドラインに追加のCONFIG値を指定するだけです。 qmake CONFIG+=symbian3とし、symbian3固有の部分については.proファイルにsymbian3 { ... }個のブロックがあります。

の1つのバイナリが必要な場合、その違いはバイナリ互換性レベルにあります。いくつかのターゲット上に存在しないDLLの関数にリンクしている場合は、基になるプラットフォームのバージョンに基づいてネイティブのRLibrary::Load()RLibrary::Lookup()などで必要なライブラリを動的にロードする独自のアダプタコンポーネントにこれらの関数呼び出しを分けることができます。実行時にプラットフォームのバージョンを取得する方法の1つはQSysInfo::s60Version()です。

+0

返信いただきありがとうございます。私はRLライブラリを見ていて、それは自分自身のDLLで役に立つと思われます。しかし、私が使用しているAPIは、例えば、プラットフォーム固有のプライベートAPIとすることができます。その場合は、DLLの構造や.defファイルへのアクセス権がわかりません。 – Routa

+0

@Routa:これらのDLLを独自のラッパーDLL(これらのプライベートAPI DLLに静的にリンクされたもの)にラップし、ラッパーDLLを動的にロードすることができます。 – laalto

+0

基本的には、すべてのプラットフォーム用に独自のラッパーDLLを作成してインストールする必要があることを意味します。 Qtを使ってこれらの多形DLL(私自身のラッパー)を作成することは可能ですか(私は "普通の" DLLを作る方法を知っています)? – Routa

関連する問題