Blackberry Playbookが正式に [〜#〜] eol [〜#〜] (2014年4月)に到達しましたが、インストールしました BGShell 、 BGSSH-SCP-SFTP 、および Term48 。だから私はいくつかksh-シェルのように、GNU awk
3.1.5、sed
4.1.5、 grep
およびpython
、someその他coreutils要素(ただしtr
)など。私はルートではありませんです。基本的には、Downloads
ディレクトリまたはシェルアプリによって作成された$ HOMEディレクトリに書き込むことができます。 (たとえば、/accounts/1000/appdata/com.BGShell..blabla/data
)で、すべてを実行することはできませんが、通常、前述の制約内でスクリプトを実行できます。興味がある理由は、これが [〜#〜 ] qnx [〜#〜] on cortex-A9 。:
QNX localhost 6.6.0 2014/03/19-01:28:41EDT OMAP4430_ES2.2_HS_Winchester_Rev:07 armle
だから私は 古いプロジェクト を活用しようとしていくつかのバイナリをコンパイルしました1。これを機能させるには多くの変更が必要ですが、セットアップされており、ほとんどのターゲット(gcc
およびcoreutils-8.13
を含む)をコンパイルできます。2。 summarizeに、いくつかのエラーを回避するために、configureフラグのさまざまなバリエーションといくつかの開発ツールの古いバージョンを使用してコンパイルしました。私は次のようなものに落ち着きました:
CFLAGS="-march=armv7-a -marm -fno-strict-aliasing -mtune=cortex-a9 -O2 -pipe -fomit-frame-pointer -mlittle-endian"
AUTOMAKE=automake-1.11: AUTOCONF=: AUTOHEADER=: AUTORECONF=: ACLOCAL=aclocal-1.11: MAKEINFO=makeinfo-4.13a
10.3 SDKからリンクされたarm-unknown-nto-qnx8.0.0eabi-gcc
クロスコンパイラを使用します。これはmomentics IDE内にあります。結果のバイナリは次のようになります。
ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), BuildID[md5/uuid]=41442b23fecda2d1d7cc5d2c68432a33, not stripped
しかし、それらのすべてがこのメッセージでタブレット上でエラーになります:
ldd:FATAL: Unresolved symbol "getopt_long" called from Executable
さまざまなフラグを使用して何度も再コンパイルし、常にそのメッセージが表示されるので、ビルドスクリプトでコンパイラ以外のものを誤ってリンクした可能性があると考えています(これは私の専門知識を超えていますが、おそらくガベージコレクションについての何か、すなわちcollect
?)。それとも、ターゲットプラットフォームのエキゾチックな構成ですか?
セットアップ(および経験不足)のためにここで何百万もの問題が発生した可能性がありますが、いくつかの手がかりを探しているので、そのようなエラーから理解する必要がある特定のことはありますか?
1.要約すると、それはfetch、patch、compile、install to somedirへの一連のスクリプトです。 bundle 1つのZipファイルへのディレクトリからかわいいRuby webrickサーバーを生成し、タブレットを使用してスクリプトとアーカイブをダウンロードします(私はそれを使用しません250mbのアーカイブ、私はいくつかのWebファイルホストとブラウザを使用します)。
2. Ruby、file、およびRubyターゲットをトップレベルのビルド構成から削除しました。
これは、2つの異なるSDKを混同することについてです1。 getopt_long exists on QNX6.6 。しかし、 Playbook のlibc
バージョン それはありません 以前のバージョンの/procがあるため。 link を盲目的にたどる代わりに、 Playbook OS Native SDK v2.1.0 をインストールした場合、エラーは発生しませんでした。プロジェクト。 NativeSDK v10.3 と2.1[〜#〜] ide [〜#〜] BB10 の場合。プロジェクトの情報は明確ですが、リンクが適切なSDKにリンクしていません。したがって、私が最終的に得たのは、BB10で実行するように作成されたバイナリである可能性が高いですが、まったく同じインフラストラクチャを備えていないデバイスで実行されます。興味深いことに、grep
のようなものは機能しますが、--version
に答えることを拒否しました。つまり、BBSDKでコンパイルした場合の長いオプションです。
しかし、適切なSDKがあれば、問題はありません。ほとんどのターゲットが再コンパイルされました2。これはすべて Arch Linux x84_64 で発生しています。ここで multilib リポジトリが有効になっています(そして多くの lib32-パッケージがプルされました)。これは、私がgcc
に使用したbuild.sh
構成ブロックです。3:
CONFIGURE_CMD="$EXECDIR/gcc/configure
--Host=$PBHOSTARCH
--build=$PBBUILDARCH
--target=$PBTARGETARCH
--srcdir=$EXECDIR/gcc
--with-as=ntoarm-as
--with-ld=ntoarm-ld
--with-sysroot=$BBTOOLS/target/qnx6/
--disable-werror
--prefix=$DESTDIR
--exec-prefix=$DESTDIR
--enable-cheaders=c
--enable-languages=c
--enable-threads=posix
--disable-nls
--disable-libssp
--disable-tls
--disable-libstdcxx-pch
--disable-newlib-supplied-syscalls
--enable-libmudflap
--enable-__cxa_atexit
--with-gxx-include-dir=$BBTOOLS/target/qnx6/usr/include
--enable-shared
--disable-subdir-texinfo
--enable-cross-compile
--enable-shared
CC=$PBTARGETARCH-gcc
CFLAGS='-march=armv7-a -marm -fno-strict-aliasing -mtune=cortex-a9 -O2 -pipe -fomit-frame-pointer -mlittle-endian'
LDFLAGS='-Wl,-s '
MAKEOPTS="-j5"
AUTOMAKE=automake-1.11: AUTOCONF=: AUTOHEADER=: AUTORECONF=: ACLOCAL=aclocal-1.11: MAKEINFO=makeinfo-4.13a
coreutils
とgcc
の両方が機能し、ls
とgrep
を--color
オプションでエイリアスしました。
最後に、 Playbook にtr
が付いた機能的なシェル。これにより、 [〜#〜] qnx [〜 #〜] !
1. Ryan Mansfield @ Foundry27の情報提供と @ Emmanuel の情報提供に感謝します。
2.除外されるターゲット:file
、man
、Ruby
、findutils
。結果のアーカイブは80Mibで、Ruby
webrick サーバーを使用して意図したとおりにデプロイしました。
3. ... gcc
とcoreutils
の両方に対して実際に(後者の場合はデフォルトに追加)。すべてのオプションが必須であるか、または推奨されているかは明らかではありません。 build.sh
スクリプトを適切なbootstrap/target
ディレクトリ、つまりbootstrap/gcc/build.sh
で起動することにより、すべてのターゲットを個別に構築できます。ビルド環境(bbndk-env.sh
)は、-b
オプション、つまりbuild.sh -b /path/to/bbndk-2.10
を使用して、グローバルトップbuild.shスクリプトによって一度ソースされている必要があります。ソースは、それらが構築されているwork/target
ディレクトリにフェッチされます。ビルドが成功し、オプションが指定されていない場合(プロジェクトのルートディレクトリのlib.sh
を参照)、アーカイブに圧縮されるpbhome
ディレクトリ構造に追加されます(これは、 BGShell を実行しているデバイスの$ HOMEディレクトリ。また、私の場合は x86_64 に変更したlib.sh
の Darwin への参照にも注意してください。それ以外の場合は、元のプロジェクト構成、つまりarm-unknown-nto-qnx6.5.0eabi
から何も変更されていません(QのようにBB10.3 SDKで8.0.0バージョンを使用するのとは対照的です)。したがって、問題のあるいくつかのターゲットを取り除くと、コンパイルは非常に簡単になります。