2016-05-26 3 views
0

次のコマンドを使用して、QNX OS(x86の)を標的窓に私が正常にクロスコンパイルすることができブースト:b2 toolset=qcc target-os=qnx threadapi=pthreadクロスコンパイルブースト1.60.0内部依存関係の問題

をしかし、何らかの理由で、それが得られるライブラリーのように思えますファイルは内部の依存関係に正しくリンクしません。例えば

でユニットテストフレームワークの結果についてobjdumpはやって:あなたは、タイマーやシステムライブラリ(もQNX、同様の両方にリンクするとんでもないパスがある見ることができるように

Dynamic Section: 
    NEEDED    bin.v2\libs\timer\build\qcc\release\target-os-qnx\threadapi-pthread\threading-multi\libboost_timer-qcc-mt-1_60.so.1.60.0 
    NEEDED    bin.v2\libs\system\build\qcc\release\target-os-qnx\threadapi-pthread\threading-multi\libboost_system-qcc-mt-1_60.so.1.60.0 
    NEEDED    libm.so.2 
    NEEDED    libc.so.3 

をlinuxでは、 '\'をエスケープ文字として解釈するので、QNXマシンのフォルダ構造は使用できません)。私は手動でライブラリのバイナリファイルを編集し、パスを削除しました(これは非常に危険であることがわかります...):

Dynamic Section: 
    NEEDED    libboost_timer-qcc-mt-1_60.so.1.60.0 
    NEEDED    libboost_system-qcc-mt-1_60.so.1.60.0 
    NEEDED    libm.so.2 
    NEEDED    libc.so.3 

Boostにライブラリ全体のパスを含めないよう強制することは可能ですか? QNX 6.6 qcc toolchainの問題ですか?

+0

ビルドプロセスの 'install'(または' stage')ステップを使用していないようです。ビルドディレクトリの複雑な階層からコンパイルのすべての関連出力を収集し、すべてのバイナリを1つの場所に配置します。 –

+0

@DanMašek私が理解する限り、デフォルトでは「段階」でなければなりません。出力ファイルはboost_root \ stage \ lib \ –

+0

に構築されています。面白い。 –

答えて

0

これを直接制御するプロパティは、hardcode-dll-pathsと呼ばれています。これはデフォルトでtrueになり、開発中に便利になります。 'install'メタターゲットは、これを明示的にfalseに変更するので、インストール用のバイナリはビルドツリーを参照しません。 installまたはstageターゲットを使用していないビルドプロセスを使用したようですか?

+0

おかげで申し訳ありませんが、私は今まであなたのソリューションを試していません。残念ながら、インストールもステージもこれを解決していないようです。私は同じ結果を得る、dllのパスはまだビルドツリーを使用しています。 'install'や' stage'以外の方法で 'hardcode-dll-paths'を変更することは可能ですか?何か案は?ありがとう –

+0

'hardcode-dll-paths = false'をb2のコマンドラインで指定してみてください。 –

+0

助けてくれてありがとうございますが、それでも同じ結果です。次のコマンドを実行してください: 'b2 stage hardcode-dll-paths = false toolset = qcc target-os = qnx threadapi = pthread'また、Linuxのbashシェルで同じコマンドを実行しようとしましたが、結果は同じです。これ以上のアイデアは? –