交叉编译ARM的ActiveMQ

时间:2014-10-10 03:09:53

标签: c++ linux apache arm activemq

免责声明:我是新来的,我已尽力遵守发布指南,如果需要任何额外信息,请告知我们。我对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架构交叉编译该项目,我很乐意继续这样做。

2 个答案:

答案 0 :(得分:0)

APR需要 gen_test_char 为系统而不是arm编译,为什么你得到“ bin / bash:tools / gen_test_char:无法执行二进制文件”错误,因为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

执行上述步骤后,您不应该出现“无法执行二进制文件”错误。

答案 1 :(得分:0)

  1. 交叉编译 APR 会失败
  2. 为系统编译 APR 并将 gen_test_char 复制到交叉编译的 APR 目录。
  3. 将 gen_test_char 的名称更改为 gen_test_char_host
  4. 在 Makefile 文件中,将 gen_test_char 的名称更改为 gen_test_char_host,因为 make 会再次创建它。
  5. 再次交叉编译 您可能会看到一些结构重定义需要手动查找文件并注释重新定义的结构。
相关问题