0

我已经为 HummingBoard-Pro(手臂处理器)交叉编译了一个软件。

该软件只是使用 lcm 协议接收一些数据。如果我使用交叉编译软件,应用程序接收到的数据是无效的,而如果我使用板载编译软件,一切正常。

- 软件一模一样!-我使用 cmake 和特定的 arm 工具链进行交叉编译。

交叉编译 sw 的输出示例:

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

板载编译软件的输出示例:

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)

工具链文件

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)
4

1 回答 1

0

将我的评论变成答案

您的工具链文件看起来像是两个 GNU 工具链的混合,这是不允许的,并且可能会解释您的软件的奇怪行为。

例如,我希望有一个 /usr/hummingboard/bin目录。并且不应该有一个arm-linux-gnueabihf-gcc与之匹配的/usr/arm-linux-gnueabihf/lib/.

我的猜测是您正在hard-float (hf)soft-float库和本机混合使用交叉编译器。

它通过 value 5.73599e+107=可见,0x7f800000这意味着无限

要找到根本原因,我建议检查您的浮点设置。请使用详细的 makefile 比较两个构建(工作与非工作)之间的编译器命令行。

参考

于 2017-06-21T18:43:12.307 回答