2017-06-19 40 views
0

我已經爲HummingBoard-Pro(手臂處理器)交叉編譯了一個軟件。交叉編譯的軟件產生錯誤的輸出

軟件只使用lcm協議接收一些數據。 如果我使用交叉編譯軟件,應用程序收到的數據是無效的,而如果我使用板載編譯軟件,一切正常。

- 軟件完全一樣! - 我用cmake和一個特定的手臂工具鏈交叉編譯。

交叉編譯SW的輸出例如:

first value  1 
second value 2 
third value  3 

注:船上編譯SW

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

輸出例如這是我的第一個交叉編譯嘗試這樣可能不順心的事,但我避風港」不知道是什麼。

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) 

TOOLCHAIN 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

而不查看'CMakeLists.txt'(在形式的[MCVE]),我們只能猜測。這個腳本可能需要一些* 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 - 參見最精確的命令)。 – Florian

+0

我添加了請求的文件 – Franconet

回答

0

談到我的意見爲答案

工具鏈文件看起來像兩個GNU工具鏈的混合物,這是不允許的並可以解釋你的軟件的奇怪行爲。

我會例如預計會有一個/ usr/hummingboard/bin目錄。並且不應該有arm-linux-gnueabihf-gcc/usr/arm-linux-gnueabihf/lib/匹配。

我的猜測是,你是混合hard-float (hf)soft-float圖書館和交叉編譯器native-。

它得到與這意味着無限5.73599e+107 = 0x7f800000可見。

要找到根本原因,我會建議檢查您的浮點設置。請使用詳細的makefile來比較兩種版本(工作與非工作)之間的編譯器命令行。

參考