ldd:FATAL:実行可能ファイルで未解決のシンボル「getopt_long」を呼び出す - armでQNXを使用してコンパイルされたバイナリ。なぜ?

ldd:FATAL:実行可能ファイルで未解決のシンボル「getopt_long」を呼び出す - armでQNXを使用してコンパイルされたバイナリ。なぜ?

これブラックベリープレイブック正式に到達しました廃止(2014年4月)、でも既に設置しました。BGShellBGSSH-SCP-SFTP用語48上。だから私には少しあります。ケシ- GNU 3.1.5、4.1.5 awksedその他grepのシェルと同じです。python一部その他コアツール要素(しかしなしtr)などです。ルートではない。デフォルトでは、Downloadsディレクトリでこれを行うことができます。$HOMEシェルアプリケーションによって作成されたディレクトリ(/accounts/1000/appdata/com.BGShell..blabla/dataたとえば)はすべてを実行することはできませんが、通常は上記の制限内でスクリプトを実行できます。私が興味を持っているのは、まさにこれだからです。QNX存在する皮質-A9.:

QNX localhost 6.6.0 2014/03/19-01:28:41EDT OMAP4430_ES2.2_HS_Winchester_Rev:07 armle

だから悪用しようとしました。古いプロジェクト1.この機能を機能させるには変更する必要があるものがたくさんありますが、ほとんどのターゲット(gccおよび2coreutils-8.13を含む)に対して設定およびコンパイルできます。到着まとめる、いくつかのエラーを避けるために、さまざまな構成フラグのバリエーションといくつかの以前のバージョンの開発ツールを使用してコンパイルしました。同様の問題を解決しました。

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

arm-unknown-nto-qnx8.0.0eabi-gccクロスコンパイラとの接続10.3 ソフトウェア開発キット奥に位置しています。勢い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

別のフラグを使用して何度も再コンパイルし、常にそのメッセージを受け取るため、以前のSDKをターゲットにしていたので、ビルドスクリプトでコンパイラ以外のものを間違ってリンクしている可能性があると思います... ...(これは私の専門知識です越えますが、たぶんガベージコレクションに関するものかもしれませんcollect。それともターゲットプラットフォームで奇妙な設定ですか?

設定(および経験不足)のためにここには100万の問題が発生する可能性がありますが、いくつかの手がかりを探しているので、このようなエラーで理解する必要がある具体的な内容があり、一般的にどのように逆追跡しますか?問題?


1. 全体的にスクリプトの束です。インポート修理する編むインストールするその後、ディレクトリに移動します。バンドルディレクトリをzipファイルに圧縮し、素晴らしいファイルを作成します。ルビーウェブリックサーバー、タブレットを使用してスクリプトをダウンロードしてアーカイブします(250 MBのアーカイブに使用せずにWebファイルホストとブラウザを使用します)。

2.削除しましたルビー文書ルビー最上位ビルド構成のターゲットです。

答え1

これは、2つの異なるSDK 1の問題を混同することです。選択項目を長く取得します。 存在する存在するQNX6.6。しかし、libc上記のバージョンはスクリプト しない旧バージョンがあるから/プロセス。インストールするとエラーは発生しませんPlayBook OSネイティブSDK v2.1.0盲目的にファッションに従うのではなく協会プロジェクトからこれがインストールされますネイティブSDK v10.32.1へ統合開発環境~のためBB10。プロジェクト情報は明確ですが、リンクが正しいSDKにリンクされていません。したがって、最終的にはBB10で実行されるバイナリである可能性が高くなりますが、インフラストラクチャはまったく同じではありません。興味深いことに、この機能はgrepBB SDKでコンパイルするときに機能しますが、長いオプションへの答えを拒否します。--version


しかし、正しいSDKを使用しても問題はありません。ほとんどのターゲットが再コンパイルされました 2 これらすべてが起こったArch Linux x84_64どこリポジトリが有効になっています(そして多くlib32-引っ張られたパッケージ)。これは私が3build.shで使用する構成ブロックです。gcc

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あります。lsgrep--color

ここに画像の説明を入力してください。

最後の機能trシェルスクリプトの珍しい洞察を提供します。QNX


1. ありがとうライアンマンスフィールド@Foundry27を見てください@エマニュエル情報を得ています!

2. 対象を除く: filemanrubyfindutils。結果のアーカイブサイズは80Mibです。ruby ウェブリックサーバーは期待どおりに展開するために使用されます。

3. ...両方について、gcc実際coreutilsに(後者の場合はデフォルト値を追加)。すべてのオプションが必須か推奨されるかはわかりません。各ターゲットは、build.sh適切なディレクトリ(bootstrap/target例:bootstrap/gcc/build.shビルド環境()はieオプションをbbndk-env.sh使用してグローバルトップレベルのbuild.shスクリプトによって一度取得する必要があります。ソースコードはビルドされたディレクトリに抽出されます。そうでない場合(プロジェクトのルートを参照)、アーカイブに圧縮されるディレクトリ構造に追加されます(アーカイブは実行中のデバイスの$ HOMEディレクトリに展開されます)。-bbuild.sh -b /path/to/bbndk-2.10work/targetlib.shpbhomeBGShell)。参考も参考にしてくださいダーウィンlib.sh私は x86_64私は。それ以外の場合は、元のプロジェクト構成に対する変更はarm-unknown-nto-qnx6.5.0eabiありません(Qでバージョン8.0.0およびBB10.3 SDKを使用することとは異なります)。したがって、問題のあるいくつかのターゲットを削除した後、コンパイルは非常に簡単になりました。

関連情報