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
だから私の質問は以下のとおりです。
これはシンビアンのアプリケーションのためのマルチプラットフォームのQtをコンパイルする唯一の方法です(例えば、1つのexeだけで動作させる方法はありますか?)
私はQtクリエイターを使用しています。 1つのプラットフォーム用にコンパイルした後、次のプラットフォームにコンパイルする前に、リソースファイル(.exe、.rsc、_reg.rsc)をepocフォルダからコピーします(古いファイルを上書きする)。すべてのバージョンがコンパイルされ、特定の場所に収集されたら、プラットフォームに基づいて異なるバージョンをインストールする単一のsisファイルを作成します。このプロセスはエラーが発生しやすくなります。これを行うための良い方法はありますか?
ありがとう。
返信いただきありがとうございます。私はRLライブラリを見ていて、それは自分自身のDLLで役に立つと思われます。しかし、私が使用しているAPIは、例えば、プラットフォーム固有のプライベートAPIとすることができます。その場合は、DLLの構造や.defファイルへのアクセス権がわかりません。 – Routa
@Routa:これらのDLLを独自のラッパーDLL(これらのプライベートAPI DLLに静的にリンクされたもの)にラップし、ラッパーDLLを動的にロードすることができます。 – laalto
基本的には、すべてのプラットフォーム用に独自のラッパーDLLを作成してインストールする必要があることを意味します。 Qtを使ってこれらの多形DLL(私自身のラッパー)を作成することは可能ですか(私は "普通の" DLLを作る方法を知っています)? – Routa