h1. QNXビルド環境に関するメモ(QNX版) 1.準備 1.1.QNX開発環境とQNX仮想マシンのVMwareイメージの取得 1.1.1.myQNXアカウントの取得    QNXからのソフトウエアのダウンロードには、myQNXにアカウントを登録してライセンスを取得しないと    ダウンロードできないので下記のアカウントを登録する。    ・myQNXのアカウント作成     Email:openrtm@openrtm.org     PW:4070penrtm1635    ※上記のアカウントで取得したライセンスは30日間限定なので現在は使えません。 1.1.2.QNX開発環境の取得    安藤さんのところで取得したqnx-setup-201801181542-lin.runをLinux(Ubuntu)にインストールする。
$ 
$ sudo qnx-setup-201801181542-lin.run
$ 
   インストールするとホーム配下のディレクトリにqnxのディレクトリが作成された事を確認する。    qnx/qnxsoftwarecenterのディレクトリに入りqnxsoftwarecenterを実行する。    QNX Software Centerが起動されることを確認する。    起動後の最初の画面でInstall New Packagesをクリックする。    次の画面でAvailableタブをクリックする。    Availableタブ配下にあるQNX Software Development Platform 7.0を選択し右下のInstallをクリックしインストールをする。    ホーム配下のディレクトリにqnx700のディレクトリが作成された事を確認する。 1.1.3.QNX仮想マシンのVMwareイメージの取得    Availableタブ配下にあるReferrence ImagesをクリックしToolsをクリックする。    QNX SDP 7.0 x86-64 virtual machine for VMwareを選択し右下のInstallをクリックしインストールをする。    qnx700のディレクトリ配下にvmimagesのディレクトリが作成された事を確認する。 1.1.4.依存ライブラリの取得    OpenRTM-aist-1.1.2は以下のライブラリに依存していますのでネットかダウンロードして下さい    1.libuuid-1.0.3.tar.gz    2.omniORB-4.1.6.tar.bz2    3.Python-2.7.14.tar ※linux版のOpenRTM-aist-1.1.2を構築してない場合は必要かもしれません 2.依存ライブラリのビルド 2.1.libuuid-1.0.3
$ 
$ tar -zxvf tmp/libuuid-1.0.3.tar.gz
$ cd libuuid-1.0.3
$

QNXには以下のヘッダが無いので/usr/include/x86_64-linux-gnuから持ってくる。
errno.h
sys/syscall.h
asm/unistd.h
asm/unistd_64.h
bits/syscall.h

$
$ mkdir sys
$ cp /usr/include/x86_64-linux-gnu/sys/syscall.h sys
$ mkdir asm
$ cp /usr/include/x86_64-linux-gnu/asm/unistd.h asm
$ cp /usr/include/x86_64-linux-gnu/asm/unistd_64.h asm
$ mkdir bits
$ cp /usr/include/x86_64-linux-gnu/bits/syscall.h bits
$
$ source ~/qnx700/qnxsdp-env.sh
$
$ ./configure CC="qcc -V5.4.0,gcc_ntox86_64_gpp" CXX="q++ -V5.4.0,gcc_ntox86_64_gpp" AR=ntox86_64-ar RANLIB=ntox86_64-ranlib --host=x86_64-unknown-linux-gnu
$
$ make
$
$ make install DESTDIR=/home/openrtm/libuuid-1.0.3_install
$

make installまで正常終了したらlibuuid-1.0.3_install/usr/local配下をQNX配下にコピーする。
$
$ cd ../libuuid-1.0.3_install/usr/local
$ cp -pr include /home/openrtm/qnx700/target/qnx7/usr
$ cp -pr lib /home/openrtm/qnx700/target/qnx7/x86_64/usr
$
$
2.2.omniORB-4.1.6
$
$ tar -jxvf omniORB-4.1.6.tar.bz2
$ cd omniORB-4.1.6
$ source ~/qnx700/qnxsdp-env.sh
$ 
$ ./configure CC="qcc -V5.4.0,gcc_ntox86_64_gpp" CXX="q++ -V5.4.0,gcc_ntox86_64_gpp" AR=ntox86_64-ar RANLIB=ntox86_64-ranlib --host=x86_64-unknown-linux-gnu
$ ./configure CC=x86_64-pc-nto-qnx7.0.0-gcc-5.4.0 CXX=x86_64-pc-nto-qnx7.0.0-g++-5.4.0 AR=x86_64-pc-nto-qnx7.0.0-gcc-ar-5.4.0 RANLIB=x86_64-pc-nto-qnx7.0.0-gcc-ranlib-5.4.0 --host=x86_64-unknown-linux-gnu
$
$ make clean
$ make CC=gcc -C src/tool/omniidl/cxx/cccp
$ make CXX=g++ -C src/tool/omniidl/cxx
※ここで、python2.7のヘッダ関連のエラーが出る時はpython2.7(Python-2.7.14)パッケージをLinux環境でmake & make installして下さい
$ make CC=gcc -C src/tool/omkdepend
$ 

makeファイルとソースの修正
$ 
$ gedit mk/beforeauto.mk
$ 
770行目
###########################################################################
#
# OS dependencies
#
# So much for autoconfiguration... ;-)

###################
ifdef Linux
IMPORT_CPPFLAGS += -D__linux__
OMNITHREAD_POSIX_CPPFLAGS = -DNoNanoSleep -DPthreadDraftVersion=10
OMNITHREAD_CPPFLAGS = -D_REENTRANT
#OMNITHREAD_LIB += -lpthread <--- ここを変更
OMNITHREAD_LIB += -lsocket
endif

$ 
$ gedit src/lib/omnithread/posix.cc
$ 
82行目
#include 
#include 
#include 
#include 

#include     <--- 追加
#include     <----- 追加

#if (defined(__GLIBC__) && __GLIBC__ >= 2) || defined(__SCO_VERSION__) || defined(__aix__) || defined (__cygwin__) || defined(__darwin__) || defined(__macos__)
// typedef of struct timeval and gettimeofday();
#include 
#include 
#endif

$
$ make
$ make install DESTDIR=/home/openrtm/util/omniORB-4.1.6_install
$

make installまで正常終了したらomniORB-4.1.6_install/usr/local配下をQNX配下にコピーする。
$ 
$ cd ../omniORB-4.1.6_install/usr/local
$ cp -pr include /home/openrtm/qnx700/target/qnx7/usr
$ cp -pr bin /home/openrtm/qnx700/target/qnx7/x86_64/usr
$ cp -pr lib /home/openrtm/qnx700/target/qnx7/x86_64/usr
$ cp -pr share /home/openrtm/qnx700/target/qnx7/x86_64/usr
$  
3.OpenRTM-aist-1.1.2のビルド
$ 
$ tar -zxvf OpenRTM-aist-1.1.2.tar.gz
$ cd OpenRTM-aist-1.1.2
$ source ~/qnx700/qnxsdp-env.sh
$ ./configure CC=x86_64-pc-nto-qnx7.0.0-gcc-5.4.0 CXX=x86_64-pc-nto-qnx7.0.0-g++-5.4.0 AR=ntox86_64-ar RANLIB=ntox86_64-ranlib --host=x86_64-unknown-linux-gnu
$ 

※configureでdoxygen関連のエラーでconfigureが止まる場合はapt-getでdoxygenパッケージをインストールして下さい
$ sudo apt-get install doxygen doxygen-gui graphviz

※configureでautomake関連のエラーでconfigureが止まる場合はaptでautomakeパッケージをインストールして下さい
$ sudo apt install automake

-ldlの削除 src/lib/coil,src/lib/rtm
$ gedit config.status
$ gedit src/lib/coil/config.status
//S["LDFLAGS"]=" -luuid -ldl" <--- -ldlを削除
S["LDFLAGS"]=" -luuid"

$ gedit src/ext/ec/rtpreempt/Makefile.am
-lrtの削除
#------------------------------------------------------------
# Targets
#------------------------------------------------------------
# Targets directories
moduledir = $(rtm_ecdir)
module_LTLIBRARIES = RTPreemptEC.la
RTPreemptEC_la_SOURCES = RTPreemptEC.cpp RTPreemptEC.h
RTPreemptEC_la_LDFLAGS = -module -shared
RTPreemptEC_la_FLAGS = -L$(top_builddir)/src/lib/rtm/.lib
RTPreemptEC_la_LIBADD = \
#	-lrt                                  \
	$(top_builddir)/src/lib/rtm/libRTC.la \
	$(top_builddir)/src/lib/coil/lib/libcoil.la 

all: all-am

$ 
$ make
※ここで、omniORB4のヘッダ関連のエラーが出る時は2.2.で作成したomniORB-4.1.6_install/usr/local配下のincludeを/usr配下にコピーするか、
configureに"--with-omniorb=/home/openrtm/omniORB-4.1.6_install/usr/local"を追加してconfigureからやり直して下さい
$ 
$ make install DESTDIR=/home/openrtm/OpenRTM-aist-1.1.2_install
$ 

make installまで正常終了したら OpenRTM-aist-1.1.2_install/usr/local 配下をQNX配下にコピーする。
$ 
$ cd ../OpenRTM-aist-1.1.2_install/usr/local
$ cp -pr bin /home/openrtm/qnx700/target/qnx7/x86_64/usr
$ cp -pr etc /home/openrtm/qnx700/target/qnx7/x86_64/usr
$ cp -pr lib /home/openrtm/qnx700/target/qnx7/x86_64/usr
$ cp -pr share /home/openrtm/qnx700/target/qnx7/x86_64/usr
$ 
4.仮想マシンでの確認試験の環境構築  ※vSphereで構築されたサーバー上で作成します。 4.1.QNXの仮想マシンの作成 4.1.1.新規仮想マシンの作成    構成:カスタム    名前と場所     名前:QNX700    ストレージ     localdisk SSD     仮想マシンのヴァージョン:8    ゲストOS     その他->その他(64ビット)    CPU     仮想ソケット数:2     仮想ソケットあたりのコアの数:4    メモリ     8GB    ネットワーク     NICをいくつ接続しますか?:1     NIC 1:VM Network     アダプタ:VMXNET 3  パワーオン時に接続をチェック    SCSIコントローラ     LSI Logic パラレル にチェック    ディスクの選択     新規仮想ディスクを作成にチェック    ディスクの作成     容量:8 GB    ディスクプロビジョニング:シックプロビジョニング(Lazy Zeroed)     場所:仮想マシンで保存    詳細オプション     仮想デバイスノード:IDE(0:0)    終了 4.1.2.作成したQNX700にQNXのVMwareイメージをアップロードする    仮想マシンのホストのストレージから作成したQNX700のフォルダに入る。    1.1.3.でインストールしたqnx700配下にあるifs.vmdkとfs.vmdkをQNX700のフォルダにアップロードする。     qnx700/vmimages/qnx700.x86_64.*/ifs/x86_64/ifs.vmdk     qnx700/vmimages/qnx700.x86_64.*/fs/x86_64/fs.vmdk 4.1.3.作成したQNX700のハードディスクにQNXのVMwareイメージを設定する。    QNX700の仮想マシンの設定からいったんハードディスク1を削除する。    次にハードディスクの追加で下記の内容でハードディスクを2つ作成する。     ハードディスク1      仮想デバイスノード:IDE(0:0)      既存のディスクを使用する:ifs.vmdk(先ほどアップロードしたQNX700フォルダ配下のifs.vmdk)     ハードディスク2:      仮想デバイスノード:IDE(0:1)      既存のディスクを使用する:fs.vmdk(先ほどアップロードしたQNX700フォルダ配下のfs.vmdk) 4.1.3.QNX700仮想マシンの起動    起動ボタンをクリックしコンソール画面でQNXが起動している事を確認する。 4.2.QNX700仮想マシンにOpenRTM-aist-1.1.2のインストール 4.2.1.QNX開発環境(Linux上)で作成したOpenRTM-aist-1.1.2をQNX700仮想マシンにインストールするには    /home/openrtm/qnx700/target/qnx7/x86_64配下のusrをtarコマンド固める。
$ 
$ cd  /home/openrtm/qnx700/target/qnx7/x86_64
$ tar -zcvf usr.tar.gz usr
$ 
   scpコマンド等で固めたtarファイルをQNX700仮想マシンへコピーし解凍する。
$ 
$ pwd
$ /
$ tar -zxvf usr.tar.gz usr
$ 
4.3.QNX700仮想マシンでのomniNamingサーバーの起動 4.3.1./usr/bin/rtm-namingシェルの修正    QNX(Unixベース)とLinuxではpsコマンドのオプションに違いがあるため、    このままrtm-namingシェルを実行するとエラーで起動出来ないのでpsコマンドを記述している    箇所に-pオプションを追加して下さい。 4.3.2.omniNamingサーバーの起動    rtm-namingシェルを実行し、omniNamingが起動する事を確認する
$ 
$ cd /usr/bin
$ ./rtm-naming
$ 
4.4.OpenRTM-aist-1.1.2に付属しているexampleの実行   以下のC++版のexampleを実行し動作する事を確認する。   1.SimpleIO   2.SeqIO   3.SimpleService   4.Composite   5.ConfigSample   ※実行結果を添付します。ご確認して下さい。