我正在尝试交叉编译用于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
上面的代码片段应该确保所有工具都可用。您可能需要添加具有适当标题位置的
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/