我正在尝试交叉编译用于arm平台的apache可移植运行时库apr-1.5.2 lib。我正在遵循以下步骤。

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

我没有在configure和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未知的linux gnu gcc
有谁能帮我用正确的方法来构建用于交叉编译的apr吗?

最佳答案

我正在遵循以下步骤。

./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

上面的代码片段应该确保所有工具都可用。您可能需要添加具有适当标题位置的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

关于c - 发行针对ARM的交叉编译apr-1.5.2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44688195/

10-11 15:51
查看更多