1. 程式人生 > >arm+linux交叉編譯libxml2

arm+linux交叉編譯libxml2

1 configure.sh

    編寫配置指令碼configure.sh如下:

#!/bin/bash
PREFIX=/home/share/libxml2
HOST=arm-hisi-linux
./configure --prefix=$PREFIX --host=$HOST

   執行configure.sh基本即可對libxml2進行配置。

2 arm-hisi-linuxi/python2.7/pyconfig.h

    完成配置後,就使用make命令進行編譯。然而,事情並沒有那麼順利,提示錯誤:

In file included from /usr/include/python2.7/Python.h:8:0,
                 from libxml.c:14:
/usr/include/python2.7/pyconfig.h:15:52: fatal error: arm-linux-gnueabi/python2.7/pyconfig.h: No such file or directory
compilation terminated.
 

在/usr/include/python2.7/Python.h的第8行看到:

    

    而在libxml2原始碼libxml.c的第14行看到:


    最後看看/usr/include/python2.7/pyconfig.h第15行:


    因此,可知知道上面的出錯資訊是指:找不到arm-linux-gnueabi/python2.7/pyconfig.h這檔案。這檔案在/usr/include/python2.7/pyconfig.h中被引用到,而/usr/include/python2.7/pyconfig.h又在/usr/include/python2.7/Python.h中被引用到,而/usr/include/python2.7/Python.h則在libxml2原始碼中的libxml.c檔案中被引用到。

    簡而言之,就是找不到arm-linux-gnueabi/python2.7/pyconfig.h

    解決這個問題的方法有2種:a)按照參考資料[3]的方法,在配置檔案中新增--without-python選項;b)新增python的標頭檔案路徑。

    經過測試,a)方法是可行的。但是b)方法就遇到問題:參考《交叉編譯libgd》新增環境變數CFLAGS的方法,在configure.sh中新增:

export CFLAGS=-I/home/share/libxml2/usr/include

    CFLAGS指定的目錄中包含pytconfig.h,但是問題依舊。

    回顧對上面出錯資訊的分析發現,現在是交叉編譯,為什麼還會引用宿主機的標頭檔案目錄呢?於是使用檢視libxml2的confugre --help幫助資訊,發現一項內內容:

 --with-python[=DIR]     build Python bindings if found
    由於下載的libxml2原始碼中已經綁定了python的原始碼,於是在configure.sh標本中新增--with-python[=DIR]選項:
#!/bin/bash
PREFIX=/home/share/libxml2
HOST=arm-hisi-linux
./configure --prefix=$PREFIX --host=$HOST --with-python=/home/share/libxml2/python
    重新配置之後,就可以編譯通過了。

原文參考:

http://m.blog.csdn.net/blog/Q1302182594/44975527