【问题标题】:Issue cross-compiling apr-1.5.2 for ARM为 ARM 发布交叉编译 apr-1.5.2
【发布时间】:2017-06-22 00:23:55
【问题描述】:

我正在尝试为 ARM 平台交叉编译 Apache Portable Run-time library APR-1.5.2 lib。我正在按照以下步骤操作。

./configure --host=aarch64-unknown-linux-gnu CC=aarch64-unknown-linux-gnu-gcc
make 

我在配置和制作中没有收到任何错误,但是当我尝试将其链接到我的代码时,我收到了链接错误。

#include <iostream>
#include <stdio.h>
using namespace std;

#include "apr_general.h"
#include "apr_network_io.h"
#include "apr_strings.h"

int main(){
    apr_initialize();
    std::cout<<"Welcome Program compiling  "<<std::endl;
    return 0;
}

当我使用交叉编译器编译代码时出现错误。

aarch64-unknown-linux-gnu-g++ -o Test -I ../../../../Static_APR/apr-1.5.2/include DAS.cpp ../../../../Static_APR/apr-1.5.2/.libs/libapr-1.a -lpthread

**apr-1.5.2/.libs/libapr-1.a(start.o): Relocations in generic ELF (EM: 62)**

使用 g++ 可以很好地编译代码。

g++ -o Test -I ../../../../Static_APR/apr-1.5.2/include DAS.cpp ../../../../Static_APR/apr-1.5.2/.libs/libapr-1.a -lpthread

即使我使用了 CC=aarch64-unknown-linux-gnu-gcc,为什么 APR 库没有为 arm(交叉编译器)构建

谁能帮助我正确的方法来构建 APR 以进行交叉编译?

【问题讨论】:

    标签: c linux cross-compiling autotools apr


    【解决方案1】:

    我正在执行以下步骤。

    ./configure --host=aarch64-unknown-linux-gnu CC=aarch64-unknown-linux-gnu-gcc
    make
    

    您的./configure 应包含--build--host 是您正在为其编译的机器。另请参阅 Autoconf 邮件列表中的 How To Configure for Android?。可能是这样的:

    export CPP=aarch64-unknown-linux-gnu-cpp
    export CC=aarch64-unknown-linux-gnu-gcc
    export CXX=aarch64-unknown-linux-gnu-g++
    export LD=aarch64-unknown-linux-gnu-ld
    export AR=aarch64-unknown-linux-gnu-ar
    export AS=aarch64-unknown-linux-gnu-as
    export RANLIB=aarch64-unknown-linux-gnu-ranlib
    
    export CFLAGS="..."
    export CXXFLAGS="..."
    
    ./configure --build=`config.guess` --host=aarch64-unknown-linux-gnu 
    

    上面的 sn-p 应该确保所有工具都可用。您可能需要在适当的标题位置添加CFLAGSCXXFLAGS;以及带有相应库位置的 LDFLAGS

    您应该验证RANLIB 的程序。它可能不是你想的那样。例如,在一个 Ubuntu for ARM 版本上是:

    export RANLIB=aarch64-unknown-linux-gcc-ranlib-4.7
    

    你可能需要找到config.guess:

    $ find /usr -name 'config.guess'
    /usr/lib/rpm/redhat/config.guess
    /usr/share/automake-1.15/config.guess
    ...
    

    最后,您可能会发现这些脚本很有用。他们通过设置路径和设置工具来帮助构建另一个库:setenv-android.shsetenv-embedded.sh

    【讨论】:

    • 感谢您提供信息 根据我的理解和 GCC 文档 --build 是您正在构建的机器 --host 是您正在为其构建的机器 --target 是 GCC 将生成二进制文件的机器对于
    • @VinayPatel - 对不起,对不起。根据 Autoconf 邮件列表中的How To Configure for Android?,您需要同时使用--host--build--target 用于构建编译器。我要改变答案。
    猜你喜欢
    • 2019-05-21
    • 2011-07-24
    • 2014-12-05
    • 2012-08-04
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多