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を構築する場合:
LINKMODESHARED必要があります
、ただし静的接続の場合:
LINKMODELINKMODE必要があります

ツールの準備

ツールをインストールします。
-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 ++ツールは、作業をより楽しく、より実り多いものにします。 親愛なる同僚の皆さん、幸運を祈ります!

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

Source: https://habr.com/ru/post/J222661/


All Articles