c - 为 ARM 发布交叉编译 apr-1.5.2



我正在尝试交叉编译用于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

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

谁能帮助我正确构建用于交叉编译的 APR?

我正在按照以下步骤操作。

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

您的./configure应包括--build--host是你正在编译的机器。另请参阅如何针对安卓进行配置?在 Autoconf 邮件列表中。也许像这样:

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 

上面的代码段应确保所有工具都可用。您可能需要使用适当的标头位置添加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.sh 和 setenv-embedded.sh。

最新更新