为 ARM 交叉编译 ActiveMQ
Posted
技术标签:
【中文标题】为 ARM 交叉编译 ActiveMQ【英文标题】:Cross compile ActiveMQ for ARM 【发布时间】:2014-12-05 03:32:34 【问题描述】:免责声明:我是新来的,我已尽力遵守发布指南,因此如果需要任何额外信息,请告诉我。我对 Linux 开发也比较陌生。
背景: 我正在使用 Linux 上的 ActiveMQ-cpp 构建库。我已经在主机 Ubuntu PC 上成功构建并运行了它,但是尝试为基于 ARM 的目标机器交叉编译它会产生一些非常深奥的错误。
第一步涉及使用 arm-linux-gcc 编译器构建 APR (http://apr.apache.org/)。经过一番研究,以下命令可以轻松运行配置脚本:
CC=/usr/local/arm-linux/bin/arm-linux-gcc ./configure --prefix=/root/apr-arm --host=arm-linux cross_compiling=yes ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no apr_cv_process_shared_works=no
这允许下一步 - 运行 makefile。
当前问题:在命令行输入 make 过早退出以下行:
[...]
/root/.local/share/Trash/files/apr-1.5.1/build/mkdir.sh include/private
tools/gen_test_char > include/private/apr)escape_test_char.h
/bin/bash: tools/gen_test_char: cannot execute binary file
make[1]: *** [include/private/apr_escape_test_char.h] Error 126
make[1]: Leaving directory `/root/.local/share/Trash/files/apr-1.5.1'
make: *** [all-recursive] Error 1
尝试的修复:提问者发布的以下问题的解决方案无效。可能是我没有正确遵循流程 (Apache Cross Compilation Error ./gen_test_char: cannot execute binary file)
在同一主题中,我尝试从其目录中临时删除问题 gen_test_char 程序,但聪明的脚本只是重建它。
我的目标是避免这个错误并在 Ubuntu 上继续构建过程,或者考虑其他构建库的方法。我已经在 Windows 上的 VS2013 中毫无问题地构建了它,所以如果可以为 ARM 架构交叉编译该项目,我会很乐意继续进行。
【问题讨论】:
【参考方案1】:-
交叉编译 APR 将失败
为系统编译 APR 并将 gen_test_char 复制到交叉编译的 APR 目录。
将 gen_test_char 的名称更改为 gen_test_char_host
在 Makefile 文件中将 gen_test_char 的名称更改为 gen_test_char_host,因为 make 会再次创建它。
再次交叉编译
您可能会看到一些结构重定义,需要手动查找文件并注释重新定义的结构。
【讨论】:
【参考方案2】:APR 需要 gen_test_char 为系统而不是 arm 编译,为什么你得到 "bin/bash: tools/gen_test_char: cannot execute binary file" 错误因为 make program将在您的系统上执行 gen_test_char,如果您交叉编译,那么每次出现此错误时。
为避免此错误,请按照以下步骤操作:
1) Cross compile APR which is going to fail
2) compile APR for system and copy gen_test_char to cross compiled APR's directory.
3) Again cross compile
执行上述步骤后,您应该不会收到“无法执行二进制文件”错误。
【讨论】:
以上是关于为 ARM 交叉编译 ActiveMQ的主要内容,如果未能解决你的问题,请参考以下文章