2017-06-19 3 views
0

J'ai compilé un logiciel pour un HummingBoard-Pro (processeur d'armement).Logiciel croisé compilé produisant une mauvaise sortie

Le logiciel reçoit juste quelques données en utilisant le protocole lcm. Si j'utilise le logiciel compilé croisé, les données reçues par l'application ne sont pas valides, alors que si j'utilise un logiciel compilé embarqué, tout fonctionne correctement.

-Le logiciel est exactement le même! -J'ai été compilé à l'aide de cmake et d'une chaîne d'outils d'armement spécifique.

exemple de sortie de croix compilé sw:

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

Exemple de sortie de bord compilé sw:

first value  1 
second value 2 
third value  3 

Note: Il est ma première compilation croisée tentative donc sans doute quelque chose va mal, mais je n » T vraiment idée de quoi.

CMakelists fichier

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) 

chaîne d'outils FICHIER

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

sans afficher 'CMakeLists.txt' (sous forme de [mcve]) nous ne pouvons deviner. Probablement, ce script prend des paramètres * host * au lieu de * target *. – Tsyvarev

+0

La valeur '5.73599e + 107' est' 0x7f800000' ce qui signifie [infini] (https://stackoverflow.com/questions/35022082/assign-infinity-to-float). Donc, une supposition sauvage est que vos paramètres de virgule flottante sont faux. S'il vous plaît comparer les lignes de commande du compilateur entre les deux versions (travail ou non-travail) en utilisant [makefiles verbeux] (https://stackoverflow.com/questions/2670121/using-cmake-with-gnu-make-how-can-i -voir-les-commandes-exactes). – Florian

+0

J'ai ajouté les fichiers demandés – Franconet

Répondre

0

Tournant commentaires dans une réponse

Votre fichier toolchain ressemble à un mélange de deux toolchains GNU, ce qui est interdit et pourrait expliquer le comportement étrange de votre logiciel.

Je voudrais par exemple. Attendez-vous à ce qu'il y ait un répertoire/usr/hummingboard/bin. Et ne devrait pas y avoir un arm-linux-gnueabihf-gcc pour correspondre à /usr/arm-linux-gnueabihf/lib/.

Je suppose que vous mélangez hard-float (hf) avec soft-float bibliothèques et natif avec des compilateurs croisés.

Il devient visible avec la valeur 5.73599e+107 = 0x7f800000 ce qui signifie infini.

Pour trouver la cause première, je recommande de vérifier vos paramètres de virgule flottante. Veuillez comparer les lignes de commande du compilateur entre les deux versions (travail et non-travail) en utilisant les makefiles verbeux.

Références