Cmake 交叉编译的软件产生错误的输出
我交叉编译了一个用于HummingBoard Pro(arm处理器)的软件 软件只是使用lcm协议接收一些数据。 如果我使用交叉编译软件,应用程序接收的数据无效,而如果我使用车载编译软件,一切正常 -软件完全一样! -我使用cmake和特定的arm工具链进行交叉编译 交叉编译软件的输出示例:Cmake 交叉编译的软件产生错误的输出,cmake,arm,cross-platform,lcm,Cmake,Arm,Cross Platform,Lcm,我交叉编译了一个用于HummingBoard Pro(arm处理器)的软件 软件只是使用lcm协议接收一些数据。 如果我使用交叉编译软件,应用程序接收的数据无效,而如果我使用车载编译软件,一切正常 -软件完全一样! -我使用cmake和特定的arm工具链进行交叉编译 交叉编译软件的输出示例: first value 5.73599e+107 second value 5.73599e+107 third value 5.73599e+107 first value
first value 5.73599e+107
second value 5.73599e+107
third value 5.73599e+107
first value 1
second value 2
third value 3
车载编译软件的输出示例:
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)
把我的评论变成答案
您的工具链文件看起来像是两个GNU工具链的混合体,这是不允许的,可以解释您的软件的奇怪行为 例如,我希望有一个/usr/hummingboard/bin目录。难道不应该有一个与
/usr/arm-linux-gnueabihf/lib/
相匹配的arm-linux-gnueabihf-gcc
我的猜测是,您正在将硬浮点(hf)
与软浮点
库和本机混合使用交叉编译器
它的值为5.73599e+107
=0x7f800000
,表示无限
要找到根本原因,我建议检查浮点设置。请使用详细的makefile比较两个版本(工作与非工作)之间的编译器命令行
参考资料
CMakeLists.txt
(以的形式),我们只能猜测。此脚本可能采用一些主机参数而不是目标参数。值5.73599e+107
为0x7f800000
,这意味着。因此,人们猜测,您的浮点设置是错误的。请使用比较两个版本(工作与非工作)之间的编译器命令行。我添加了请求的文件您的工具链文件看起来像是两个工具链的奇怪混合体。例如,我希望有一个/usr/hummingboard/bin
目录。还是不应该有一个armlinux gnueabihf gcc
?