Linux for WindowsからPOCOをクロスコンパイルします

POCOは、マルチプラットフォームソフトウェアの作成を容易にする、軽量でマルチプラットフォームのC ++ライブラリとクラスのオープンソースセットです。

Boostソフトウェアライセンスで利用可能。

POCOに関する追加情報:

pocoproject.org/features.html

en.wikipedia.org/wiki/POCO

よく整理されたクラス構造のドキュメントは、html-online、html-offlineで入手できます。

主な機能のドキュメントと使用例-pdfpocoproject.org/documentation/index.html



POCOには最も豊富な機能があります-多く-すべて、C ++プログラマーの幸せな生活に必要なものすべて! このツールキットは完璧に機能し、よく考え抜かれたAPIを備えています。



POCOは、次のような多数のオペレーティングシステムを対象としています。 デスクトップWindows、Windows CE、Linux。



私自身の経験から、POCOはこれらのOSで問題なく動作することに注意してください。

私の3つの記事「Cross-compile POCO from Windows」で、これらのOS向けのWindowsからのクロスプラットフォームアセンブリの方法論を伝えようとしています。



記事 "Windows for WinCEからのクロスコンパイルPOCO" habrahabr.ru/post/223157



Linux for WindowsからPOCOをクロスコンパイルします



メソッドが開発されました:

-クロスプラットフォームのtoochain Spireターミナル(ARM9)

-Windows 7 64ホストマシン

-POCO Basic Edition 1.4.6p4



動的接続(結果- *.so



ファイル)または静的接続(結果- *.a



ファイル)のPOCOを収集しましょう



POCOの準備


POCOでディレクトリを準備します。

-Basic Editionの最新の安定バージョンのPOCOアーカイブをpocoproject.org/download/index.htmlからダウンロードします。 「Linux、OS Xなどのソース」ボタン。 執筆時点では、アーカイブはpoco-1.4.6p4.tar.gzです。

-別のディレクトリに解凍します。 たとえば、WinRARを使用し、Cディレクトリで/poco/poco-1.4.6p4を作成します。



Unixプラットフォーム用のアセンブリ記述ファイルを準備します。

このファイルは、環境(makechainを構築するためのツールチェーンユーティリティと他のパラメータの名前)を決定するためにconfigureコマンドによって使用されます。

-C:/poco/poco-1.4.6p4/build/config/でファイル「ARM-Linux」を見つけ、たとえばプラットフォームの名前など、別の名前でコピーします。 ARM-Linux-Spireという名前を付けました。

注意! この名前は、「POCOアセンブリ」ステップで使用されます。

アセンブリ記述ファイルとビルドシステムに関する情報: http://pocoproject.org/docs/99150-GMakeBuildNotes.html



: http://pocoproject.org/docs/99150-GMakeBuildNotes.html





ARM-Linux-***ファイルをテキストエディターで編集します(メモ帳++を使用しました)。

1)行STLPORT_INCLUDE= , STLPORT_LIB= , OPENSSL_INCLUDE= , CFLAGS=



を見つけてコメントアウトします。 次のようになります。

#STLPORT_INCLUDE = /usr/local/include/stlport







#STLPORT_LIB = /usr/local/lib







#OPENSSL_INCLUDE = /usr/local/arm/2.95.3/include







#OPENSSL_LIB = /usr/local/arm/2.95.3/lib







#CFLAGS = -Isrc







2) SYSFLAGS =



からSYSFLAGS =



remove -I$(STLPORT_INCLUDE) -I$(OPENSSL_INCLUDE)





次のようになります。

#SYSFLAGS = -I$(STLPORT_INCLUDE) -I$(OPENSSL_INCLUDE) -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE -DPOCO_NO_FPENVIRONMENT







SYSFLAGS = -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE -DPOCO_NO_FPENVIRONMENT







3) SYSLIBS =



からSYSLIBS =



remove -L$(STLPORT_LIB) -L$(OPENSSL_LIB) -lstlport_arm-linux-gcc





次のようになります。

#SYSLIBS = -L$(STLPORT_LIB) -L$(OPENSSL_LIB) -lstlport_arm-linux-gcc -lpthread -ldl -lrt







SYSLIBS = -lpthread -ldl -lrt







4) TOOL = arm-linux



行を見つけて、 arm-linux



を機器のツールチェーンユーティリティのプレフィックスに変更します。

私はこのように変更しました:

TOOL = arm-unknown-linux-gnu







通常、Linuxデバイス用のクロスプラットフォーム開発ツールチェーンにはハードウェアが付属しています。

これは、GCCスイート( en.wikipedia.org/wiki/GNU_Compiler_Collection )のユーティリティを含むアーカイブです。



プレフィックスの名前を確認するには、/ binディレクトリのツールチェーンに移動し、 *-gcc.exe



または*-g++.exe



ファイルに注意してください*-g++.exe





たとえば、私のツールチェーンにはファイルが含まれています:

arm-unknown-linux-gnu-gcc.exe







arm-unknown-linux-gnu-g++.exe







、したがって、私のツールチェーンのプレフィックスはarm-unknown-linux-gnu



です。

5)行POCO_TARGET_OSARCH = ARM



を見つけて、任意の名前を割り当てます。これは、アセンブリ中に、アセンブリの結果でディレクトリを作成するために使用されます。 プラットフォームの意味のある名前を反映するために、 POCO_TARGET_OSARCH = ARM_Spire



という名前を付けPOCO_TARGET_OSARCH = ARM_Spire



。 したがって、ビルド後、POCOライブラリはC:\poco\poco-1.4.6p4\lib\Linux\ARM_Spire



ます。

6)アセンブリ結果の構成に注意してください。

動的接続用にPOCOを構築する場合:

LINKMODE



SHARED



必要があります

、ただし静的接続の場合:

LINKMODE



LINKMODE



必要があります



ツールの準備


ツールをインストールします。

-MinGW msys。 msysシェルを使用します。 私のMinGWにはデバイス用のSDKが付属しており、公式Webサイトwww.mingw.orgから入手できます。

-コピー&ペーストをサポートするWindows用コンソール。 著者はConEmu x64 www.conemu.ruを使用しました



コピーと貼り付けをサポートするコンソールを開きます。これ以降の手順はすべてこのコンソールから行われます。



toochain / binディレクトリの可用性を確認し、toochainからgccユーティリティの名前を入力します。 私はこれを持っています:

arm-unknown-linux-gnu-gcc -v





-このユーティリティが見つからない場合は、パスを登録します。 私の道はこれです:

set PATH=C:\Spire\SDT\TOOLCHAIN\20140226\bin;%PATH%





-再びtoochainの可用性を確認してください



makeユーティリティの可用性を確認します。

make -v





-このユーティリティが見つからない場合は、パスを登録します。 私の道はこれです:

set PATH=C:\Spire\SDT\MinGW\bin;%PATH%





-可用性をもう一度確認します



msysコマンドシェルに入り、次を実行します。

sh





-このユーティリティが見つからない場合は、パスを登録します。 私の道はこれです:

set PATH=C:\Spire\SDT\MinGW\msys\1.0\bin;%PATH%







それ以降のすべての手順は、コンソールから実行され、コピーと貼り付け+ msysシェルがサポートされます。



現在のPOCOでディレクトリを設定します。

cd C:/poco/poco-1.4.6p4







POCOアセンブリ


組み立ての前に(注文用)、コンフィギュレーターの可用性を確認できます。

./configure --help







POCO設定を実行します。

./configure --config=ARM-Linux-Spire





または、テストとサンプルなしでPOCOを構築するには:

./configure --config=ARM-Linux-Spire --no-tests --no-samples





構成が成功すると、次のようなものが表示されます。

Configured for ARM-Linux-Spire







-POCOのビルド:

make





PC(Intel i5 3.300Gz 8Gb)でのテストと例によるPOCOアセンブリ時間は12分かかりました。



収集されたPOCOライブラリは、構成設定ファイルのPOCO_TARGET_OSARCH



変数で定義したディレクトリの\lib\Linux



にあります。

コンパイルされたPOCOライブラリへの私のパスは次のようになりました: C:\poco\poco-1.4.6p4\lib\Linux\ARM_Spire







考えられる問題


POCOに直接関係しない問題がありました。

-静的POCOを使用するプロジェクトでは、 AtomicCounter



クラスの依存関係を許可しませんでした

__sync_add_and_fetch, __sync_fetch_and_add, __sync_sub_and_fetch, __sync_fetch_and_sub





解決策: SYSFLAGS = ... -DPOCO_NO_GCC_ATOMICS



に追加して、 SYSFLAGS = ... -DPOCO_NO_GCC_ATOMICS



の異なる実装を使用します。

-静的POCOを使用したプロジェクトは正常にビルドされますが、デバイスで実行可能プログラムが開始されると、コンソールに次が発行されます。

/lib/libgcc_s.so.1: version 'GCC_4.3.0' not found (required by )



これは、デバイス上のlibgcc



とホストマシン上のツールチェーンのバージョンが異なるためです。 解決策: libgcc



ライブラリーをlibgcc







POCOのアセンブリに関連する問題の原因を見つける基本的な方法:POCOソースを実行可能ファイルに接続し、ファイルの一部として収集を試みます。



情報源


「POCO C ++ライブラリGNU Make Build System」 pocoproject.org/docs/99150-GMakeBuildNotes.html



***



既製のC ++ツールは、作業をより楽しく、より実り多いものにします。 親愛なる同僚の皆さん、幸運を祈ります!



ヴラディスラフ・ホクリャコフ。



All Articles