2017-06-19 3 views
0

HummingBoard-Pro(アームプロセッサ)用のソフトウェアをクロスコンパイルしました。クロスコンパイルされたソフトウェアが間違った出力を生成する

ソフトウェアは、lcmプロトコルを使用してデータを受信します。 クロスコンパイルされたソフトウェアを使用すると、アプリケーションによって受信されたデータは無効になります。オンボードのコンパイル済みソフトウェアを使用するとすべて正常に動作します。

-ソフトウェアはまったく同じです! -I cmakeと特定のアームツールチェーンを使用してクロスコンパイルします。

クロスコンパイルSWの出力例:

first value  5.73599e+107 
second value 5.73599e+107 
third value  5.73599e+107 

ボードコンパイルSW上の出力例:

first value  1 
second value 2 
third value  3 

注:おそらく何かがうまくいかないので、それは私の最初のクロスコンパイルの試みだが、私は避難所に」本当に何について考えていますか?

CMakelistsは

cmake_minimum_required(VERSION 3.1) 

set(main_project_dir  ${CMAKE_CURRENT_SOURCE_DIR}) 

set(external_dir   ${main_project_dir}/external) 
set(external_lcm_dir  ${external_dir}/lcm_dir) 
set(external_lcm   ${external_lcm_dir}/lcm) 
set(external_lcm_build ${external_lcm}/build) 
set(external_lcm_gen_exe /usr/local/bin/lcm-gen) 


set(lcm_input_file   ${main_project_dir}/lcm_format_files/lcm_input_files/indrive.sensors.vanet.lcm) 
set(lcm_libraries    ${main_project_dir}/external/lcm_dir/lcm/build/lcm) 
set(lmc_libraries_header  ${main_project_dir}/external/lcm_dir/lcm/) 
set(lcm_autogenerated_dir  ${main_project_dir}/build/lcm_autogenerated_classes) 


add_custom_target(
    generate-lcm 
    COMMAND ${external_lcm_gen_exe} -x ${lcm_input_file} --cpp-hpath ${lcm_autogenerated_dir} 
    COMMENT "=================== Generating lcm files..." 
) 

add_subdirectory(testSender) 
add_subdirectory(testReceiver) 

ツールチェインFILE

SET (CMAKE_SYSTEM_NAME Linux) 
SET (CMAKE_SYSTEM_VERSION 1) 
SET (CMAKE_SYSTEM_PROCESSOR arm) 

INCLUDE_DIRECTORIES(/usr/hummingboard/usr/include /usr/hummingboard/include /usr/hummingboard/usr/include/arm-linux-gnueabihf/) 
LINK_DIRECTORIES(/usr/hummingboard/usr/lib /usr/hummingboard/lib /usr/hummingboard/lib/arm-linux-gnueabihf) 


SET(CMAKE_PREFIX_PATH /usr/arm-linux-gnueabihf/lib/ 
         /usr/hummingboard/ 
         /usr/hummingboard/lib/arm-linux-gnueabihf/ 
         /usr/hummingboard/usr 
         /usr/hummingboard/usr/lib/arm-linux-gnueabihf/ 
        ) 


SET (CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabi-gcc) 
SET (CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabi-g++) 



SET (CMAKE_FIND_ROOT_PATH /usr/hummingboard/ /usr/hummingboard/usr) 

SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 

SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
SET (CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) 
SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 
+0

我々は唯一の推測することができます。おそらく、このスクリプトは* target *ものの代わりにいくつかの* host *パラメータを取ります。 – Tsyvarev

+0

値「5.73599e + 107」は「無限」を意味する「0x7f800000」です(https://stackoverflow.com/questions/35022082/assign-infinity-to-float)。野生の推測では、浮動小数点の設定が間違っているということです。 [verbose makefiles](https://stackoverflow.com/questions/2670121/using-cmake-with-gnu-make-how-can-i)を使用して、両方のビルド間のコンパイラコマンドラインを比較してください(動作対非動作)。 -see-the-exact-commands)を実行します。 – Florian

+0

私は要求されたファイルを追加しました – Franconet

答えて

0

答えに私のコメントを回す

あなたのツールチェインファイルが許可されていない2つのGNUツールチェーン、の混合物のようなファイルあなたのソフトウェアの奇妙な動作を説明することができます。

/usr/hummingboard/binというディレクトリが存在することを期待してください。 /usr/arm-linux-gnueabihf/lib/と一致するarm-linux-gnueabihf-gccはありません。

私は、hard-float (hf)soft-floatライブラリとネイティブとクロスコンパイラを混在させていると思います。

数値が5.73599e+107 = 0x7f800000で表示されます。これは、を無限としています。

根本原因を見つけるには、浮動小数点設定を確認することをお勧めします。冗長なmakefileを使って、両方のビルド間でコンパイラのコマンドラインを比較してください(動作と非動作)。 ([MCVE]の形で) `CMakeLists.txt`を表示せずに

参照

関連する問題