我正在尝试为 ARM 平台交叉编译 Apache 可移植运行时库 APR-1.5.2 库。我正在按照以下步骤操作。
./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
即使我使用了 CC=aarch64-unknown-linux-gnu-gcc,为什么 APR lib 没有为 arm(交叉编译器)构建
任何人都可以帮助我以正确的方式为交叉编译构建 APR 吗?
最佳答案
I am following below steps.
./configure --host=aarch64-unknown-linux-gnu CC=aarch64-unknown-linux-gnu-gcc make
您的 ./configure
应该包含一个 --build
。 --host
是您正在编译的机器。另见 How To Configure for Android?在 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
上面的代码片段应该确保所有工具都可用。您可能需要在适当的 header 位置添加 CFLAGS
和 CXXFLAGS
;和具有适当库位置的 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 .
关于c - 为 ARM 发布交叉编译 apr-1.5.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44688195/