2017-06-22 180 views
1

我正在嘗試爲ARM平臺交叉編譯Apache便攜式運行時庫APR-1.5.2 lib。我遵循以下步驟。針對ARM交叉編譯apr-1.5.2問題

./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中沒有內置的臂(交叉編譯),即使我已經使用CC = aarch64未知-Linux的GNU-GCC

誰能幫我建立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 

的片段上方應確保所有工具都可用。您可能需要將CFLAGSCXXFLAGS加上適當的標題位置;和一個LDFLAGS與適當的庫位置。

您應該驗證RANLIB的程序。它可能不是你的想法。例如,在Ubuntu的一個版本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

+0

感謝您的信息 按我的理解和GCC文檔 --build是你在建立 是--host你正在爲 --target機器機器的機器,GCC會產生二進制對於 –

+1

@VinayPatel - 我的不好,對不起。根據Autoconf郵件列表中的[如何配置Android?](https://lists.gnu.org/archive/html/autoconf/2013-10/msg00003.html),您需要同時使用'--host '和'--build'。 '--target'用於構建編譯器。我要改變答案。 – jww